gpt4 book ai didi

javascript - 更新数组中的 1 个元素会触发 React 中其他元素的渲染吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:43 25 4
gpt4 key购买 nike

我正在为我当前的项目使用 React 和 Redux。

我有一个像这样的状态对象:

state: {
reducerOne: {
keyOne: valueOne,
keyTwo: valueTwo
}
reducerTwo: {
keyThree: valueThree
keyFour: valueFour
}
}

假设 valueFour 是一个对象数组。我使用 valueFour 数组来 map 一堆 React 元素,就像在 render 方法中一样:

this.props.valueFour.map(()=> <div/>)

(显然以上是简化的,但我想说明的是我正在渲染一堆元素)

现在,我只想更新上述元素中的一个。在我的 action/reducer 代码中,我返回整个 valueFour 数组,并在函数中更新了 1 个元素,如下所示:

Action 代码

export function updateThingInArray(elementId){
return (dispatch, getState) => {
const myArray = getState().reducerTwo.keyFour
for (let i=0; i < myArray.length; i++) {
if (myArray[i].id === elementId){
const result= [
...myArray.slice(0,i),
Object.assign({},
myArray[i],
{field:newValue}),
...myArray.slice(i+1)
]
dispatch(update(result))
}
}
}
}

reducer 代码:

export default handleActions({
[UPDATE]: (state,{payload}) => Object.assign({},state, {keyFour: payload})
},{
keyThree:{},
keyFour:{}
})

(我的 reducer 代码使用库 redux-actions)

我希望这一切都有意义。如果不明白,请询问,我会澄清。

但我的问题是,由于 keyFour 对 entireArray 进行了技术更新,这是否意味着我的所有元素都会更新,即使只有 1 个元素有新数据?如果是这样,是否有更有效的方法来实现我目前正在做的事情?

最佳答案

render 方法将再次被调用,这意味着它将再次映射到该数组。您可以查看 chrome 中的元素选项卡,您可以看到闪烁的 html,这是更改的部分。如果组件具有相同的数据和相同的键,则实际的 html 不会更改,但会在子组件中调用 render 方法。

编辑:没有意识到你正在更新嵌套键,React 只检查浅层相等:https://facebook.github.io/react/docs/shallow-compare.html

关于javascript - 更新数组中的 1 个元素会触发 React 中其他元素的渲染吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com