【发布时间】:2021-02-17 11:40:10
【问题描述】:
这是我的初始数据
const data = [
{ id: '1', name: '1' },
{ id: '2', name: '1' },
{ id: '3', name: '2' },
]
我想循环并:
-
name1将该对象添加到stateOne -
name2将该对象添加到stateTwo
两个州的最终目标都需要在其中包含对象数组:
-
stateOne需要看起来像
[
{ id: '1', name: '1' },
{ id: '2', name: '1' }
]
-
stateTwo需要看起来像
[
{ id: '3', name: '2' },
]
这是我尝试过的:
const data = [
{ id: '1', name: '1' },
{ id: '2', name: '1' },
{ id: '3', name: '2' },
]
const Testing = () => {
const [stateOne, setStateOne] = useState([])
const [stateTwo, setStateTwo] = useState([])
useEffect(() => {
data.forEach((e) => {
if (e.name === '1') {
console.log('e', e)
setStateOne((prevSate) => ({ ...prevSate, e }))
}
// if (e.name === '2') {
// setStateTwo(e)
// }
})
}, [])
console.log('stateOne', stateOne)
}
【问题讨论】:
-
data真的是静态的并在Testing组件之外定义吗?如果是这样,为什么useEffect? -
旁注:
filter的目的是创建并返回一个新数组,它通过创建一个新数组并向其中添加条目(如果您的回调返回真值)或不添加条目来实现.如果不使用数组filter返回,请不要使用filter。只需使用简单的循环遍历数组,或forEach。 -
来自 API 的数据。我只需要将过滤器放置到正确的状态,这样我就可以正确渲染我的组件。我不想使用
filter两次,这是有效的。所以我知道我在 setState 做错了什么 -
谢谢 T.J.好点,但这可能无法解决我将数据正确传递给 setState 的问题。
标签: javascript reactjs setstate