假设我处于以下状态
const [states, setStates] = useState([
{name: '', age: '', amount: ''},
{name: '', age: '', amount: ''},
]);
const total = 0;
当useEffect
字段被更改为计算age
字段时,我希望使用amount
仅更新 。然后根据已更改的total
字段更新amount
字段。我怎么做?在此示例中,我只有很少的包含三个字段的数组,但是实际上,我有很多包含很多字段的数组,因此当{{1}中的任何字段都不想使用useEffect
时, }更改。
答案 0 :(得分:1)
简短的答案是您不能这样做-useEffect
钩子不提供跟踪数组内特定对象属性的功能。
如果任何age
属性发生更改,您将不得不跟踪另一状态会改变,这将触发在依赖项数组中具有该状态的useEffect
。
const [states, setStates] = React.useState([...])
const [lastAgeUpdatedAt, setLastAgeUpdatedAt] = React.useState(null)
// const total = 0; // by the way, this looks like something that
// should also be stored in a state,
// the below would be more appropriate
const [total, setTotal] = React.useState(0)
const handleUpdateAge = () => {
setStates(...)
if (ageUpdatesAvailable) {
setLastAgeUpdatedAt(Date.now())
}
}
React.useEffect(() => {
const total = states.reduce(
(accumulator, item) => accumulator + parseInt(item.age, 10),
0
)
setTotal(total)
}, [lastAgeUpdatedAt])