/
githubmirror
/
react-native
Обзор
Документация
Войти
/
githubmirror
/
react-native
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/rn-tester/js/examples/Performance/performanceComparisonExamples/SetStateInWrongEffectExample.js
62 строки
2 KB
Tim Yung
RN: Delete `@oncall` Annotations (#51416)
18 май 2025, 02:18
18 май 2025, 02:18
84de8a0
Код
Авторство
О чём код?
/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict-local * @format */ 'use strict'; import type {ItemDataType} from '../components/itemData'; import {LIST_1000_ITEMS} from '../components/itemData'; import ItemList from '../components/ItemList'; import * as React from 'react'; import {memo} from 'react'; const {useState, useEffect} = React; const ItemListMemo = memo(ItemList); function BadExample(props: {listData: ItemDataType[], filteredText: string}) { const {listData, filteredText} = props; const [visibleListData, setVisibleListData] = useState<ItemDataType[]>(listData); useEffect(() => { setVisibleListData( listData.filter(item => item.name.toUpperCase().includes(filteredText.toUpperCase()), ), ); }, [listData, filteredText]); return <ItemListMemo data={visibleListData} />; } function GoodExample(props: {listData: ItemDataType[], filteredText: string}) { const {listData, filteredText} = props; const visibleListData = listData.filter(item => item.name.toUpperCase().includes(filteredText.toUpperCase()), ); return <ItemListMemo data={visibleListData} />; } function SetStateInWrongEffectBadExample(): React.Node { return <BadExample listData={LIST_1000_ITEMS} filteredText="f8" />; } function SetStateInWrongEffectGoodExample(): React.Node { return <GoodExample listData={LIST_1000_ITEMS} filteredText="f8" />; } export default { title: 'Re-render with unnecessary effect and state changes', description: 'You may not need an effect in your component. State updates in unnecessary effects will trigger re-render that can be avoided.', Bad: SetStateInWrongEffectBadExample, Good: SetStateInWrongEffectGoodExample, };