我有一个图标组件,它绘制一个图标并且它正在闪烁,因为父级让它毫无意义地重新渲染。我不明白为什么会发生这种情况以及如何防止这种情况发生。
这是一个说明问题的小吃。
我们使用 setInterval 模拟父级更改。
我们通过在控制台中记录“重新渲染”来模拟图标重新渲染。
这是代码:
import * as React from 'react';
import { Text, View, StyleSheet } from 'react-native';
// or any pure javascript modules available in npm
let interval = null
const Child = ({name}) => {
//Why would this child still rerender, and how to prevent it?
console.log('rerender')
return <Text>{name}</Text>
}
const ChildContainer = ({name}) => {
const Memo = React.memo(Child, () => true)
return <Memo name={name}/>
}
export default function App() {
const [state, setState] = React.useState(0)
const name = 'constant'
// Change the state every second
React.useEffect(() => {
interval = setInterval(() => setState(s => s+1), 1000)
return () => clearInterval(interval)
}, [])
return (
<View>
<ChildContainer name={name} />
</View>
);
}
如果您能向我解释为什么会发生这种情况以及修复它的正确方法是什么,那就太棒了!