React中useState初始值与实际值不一样的解决方法

遇到一例很奇葩的情况,刚用useState定义一个状态值,然后打印它,竟然与传入的初始值不一样!

const [value, setValue] = useState(props.value);

// 两个值并不相同,即使value是简单的字符串或数字类型也不行
console.log(props.value, value); 

打断点测试,也看不出什么问题。

问题出在父组件传入的属性props,动态变化时,子组件要时刻监听。

useEffect(() => {
    setValue(props.value);
}, [props])

其实该问题本来很简单,难在恰巧父级中想在数据变化时,全量更新子组件,但React“过于智能”,它能分析出不需要创建新的DOM元素。。。

const listItem = nodes.map(node => 
		<GroupLink label={node.name} 
				key={node.id}
	 />);

一句话:React中状态出问题,多考虑用useEffect解决。

(版权归cpury.com所有,转载请注明出处。)