react-hooks求解,当⽗级props更新是,state不更新(Hook中组
件pro。。。
提问:
is_focus 第⼀次是false, 第⼆次是true。如果我不写useEffect的话,is_focus⼀直都是false,都是第⼀次的props的内容。这样正常嘛?必须要在useEffect中更新props的值?props上⾯的其他数据也⼀样,console.log props的数据是更新的,但是useState 之后还是第⼀次的数据
export default function UserInfo(props: IProps) {
const [is_focus, setFocus] = useState(props.is_focus)
// is_focus 第⼀次是false, 第⼆次是true。如果我不写useEffect的话,is_focus⼀直都是false,都是第⼀次的props的内容。这样正常嘛?必须要在useEffect中更新props的值?  useEffect(() => {
setFocus(props.is_focus)
}, [props.is_focus, ated_id])
const handleFocus = useCallback(() => {
props.dispatch({
type: `${commonSpace}/changeFollow`,
payload: {
uid: ated_id
},
callback: () => {
setFocus(!is_focus)
}
})
}, [is_focus, props.is_focus, ated_id])
return (
<View className='userInfoBox'>
<Image className='userAvatar' src={props.src} />
<Text className='userName'>{props.nickname}</Text>
<Button
onClick={handleFocus}
className={is_focus ? 'userStatus checked' : 'userStatus'}
hover-class='hover'
>
{is_focus ? '已关注' : '关注'}
</Button>
</View>
)reacthooks理解
}
回答1:
第⼀种情况是正常的,useState 他只会在函数执⾏时调⽤⼀次,给⼀个初始值。
后续的更新 state 需要借助 useEffect 来实现。
推荐两篇⽂章:
【译】什么是React Hooks:
精读《Function Component ⼊门》:
回答2:
是的 useState(...)你可以⼤致看成是constructor⾥的东西组件不卸载重新装在就不会执⾏了
总结:
在react-hook中如果props更新,想让组件视图更新使⽤useEffect(), 第⼆个参数传⼊⼀个数组,数组的每⼀项为要监听的变量,如果这个变量变化就会执⾏ useEffect 中的 callback 副作⽤函数。