React Native子组件点击后父组件状态不更新怎么办?
大家好,我在用React Native开发父子组件时遇到问题。父组件通过props传递了一个更新状态的函数给子组件,但点击子组件按钮后状态没有变化:
// 父组件
const Parent = () => {
const [count, setCount] = useState(0);
return (
setCount(prev => prev + 1)}
/>
);
};
// 子组件
const Child = ({ count, onIncrement }) => (
当前计数:{count}
);
我尝试过在父组件里用箭头函数包裹setCount,也试过用useCallback,但点击后count始终显示初始值0。控制台也没有报错,这是什么原因呢?
TouchableOpacity没有绑定onPress事件处理函数。我们来分解问题:
1. 你传了
onIncrement给子组件,但子组件里的按钮根本没调用它2. 点击事件根本没触发父组件的状态更新函数
改起来很简单,把子组件改成这样:
为什么这样能解决问题:
- React Native的
TouchableOpacity需要明确指定onPress才会响应点击- 你之前只是把回调函数传给了子组件,但没告诉它什么时候触发
- 现在每次点击都会调用父组件传下来的
onIncrement我遇到过很多次这种情况,特别是深夜写代码的时候容易犯这种低级错误。有时候问题就出在最简单的地方,但就是死活看不出来。
另外建议可以加个console.log调试:
这样如果点击后看到log输出但状态没更新,那才是真的遇到state更新问题。不过你的情况应该就是漏绑onPress了。
父组件保持不变,这样就能正常更新了。折腾了吧?😄