【发布时间】:2020-04-10 03:23:15
【问题描述】:
所以我有一个父组件,它映射一个子数组,这些子组件都有一些状态挂钩变量 - 在示例中它是一个字符串,但它可以是任何东西。
当我过滤父组件数组时,子组件神秘地超过了前数组的状态值:如果第一个子组件将状态设置为字符串“true” - NEW 数组中的第一个子组件也呈现为“true” .
我知道/认为这与 js 引用有关,但我不知道如何解决它!
父母:
function App() {
const array = ['the', 'cat', 'and', 'the', 'old', 'hat']
const [words, setWords] = useState(array)
const filterWords = (e) => {
setWords(array.filter( a => a.includes(e.target.value)))
}
return (
<div className="App">
<input type='text' onChange={filterWords} />
{
words.map( word => <Sub word={word} />)
}
</div>
);
}
孩子:
const [state,
setState] = useState('false')
useEffect( () => console.log('rerendered', state) )
return (
<div>
<>{props.word}</>
<>{state}</>
<button onClick={() => setState('true')}>set state</button>
</div>
)
}
这会呈现一个列表,如下所示:
false [设置状态]
cat false [设置状态]
...等
现在我点击第一个按钮就可以了
真正的[设置状态]
cat false [设置状态]
...等
然后我在搜索框中输入字母“o” - 现在应用程序呈现
旧 true [设置状态]
但是 "old" 子组件状态从未设置为 true 对吗?我一定错过了一些基本的东西,但我就是不明白..非常感谢帮助
【问题讨论】:
-
这可能就是为什么 React 总是告诉你在迭代和渲染东西时使用 KEY
标签: javascript reactjs react-hooks