React Native中如何在多个子组件间共享和更新状态?
在开发一个待办事项列表时,我需要让两个子组件(列表和输入框)共享同一个状态数组。现在父组件通过props传递状态和set函数,但修改状态后界面没及时更新,甚至出现“Maximum update depth exceeded”错误。试过用useEffect监听状态变化,但子组件还是获取不到最新数据。
父组件代码大致这样写:
function TodoList() {
const [todos, setTodos] = useState([]);
return (
<View>
<TodoInput onChange={newTodo => setTodos([...todos, newTodo])} />
<TodoItems list={todos} onDelete={(id) => setTodos(todos.filter(t => t.id !== id))} />
</View>
);
}
子组件直接通过props接收数据,但删除操作时总是报“Can’t perform a React state update on an unmounted component”错误,这该怎么解决?
setTodos([...todos, newTodo])改成函数式更新:setTodos(prev => [...prev, newTodo]),删除同理用setTodos(prev => prev.filter(...))。这样避免闭包捕获过时的 todos。就这样。
子组件别在render里直接调用onXXX(),要通过事件触发,比如按钮点击再删,不然容易误更新。那个unmounted警告是因为你在异步操作后还去改state,加个isMounted判断或者用useEffect清理就行,但最省事就是确保别在组件卸载后还调setState。