Reactjs 自定义挂钩重置为其初始状态
钩子 组成部分Reactjs 自定义挂钩重置为其初始状态,reactjs,react-hooks,Reactjs,React Hooks,钩子 组成部分 export const useCreateAccount = () => { const [state, setState] = useState(initialState) const onChangeInput: ChangeEventFunction = useCallback(({ target }) => { if (!target.files) { return setState({ ...state, [target.na
export const useCreateAccount = () => {
const [state, setState] = useState(initialState)
const onChangeInput: ChangeEventFunction = useCallback(({ target }) => {
if (!target.files) {
return setState({ ...state, [target.name]: target.value })
}
setState({ ...state, [target.name]: target.files[0] })
}, [])
return { onChangeInput }
}
const{onChangeInput}=useCreateAccount()
每次我在第二个输入(name2)中做一些更改时,组件的先前状态(name1)都已丢失(重置为初始状态),这就是我使用“useCallback”的原因,我只需要一个“onChangeInput”实例
但如果我删除“useCallback”,则状态将保留以前的值(name1)
我无法理解钩子中的这种行为,有人能详细说明一下吗?来自:
组件中的任何函数,包括事件处理程序和效果,都可以从创建它的渲染中“查看”道具和状态
在这里,当您使用useCallback
时,函数已在其初始呈现中定义,并已定义初始状态。这就是为什么useCallback
有一个dependency数组,可用于刷新函数及其内部使用的值
但是您不能使用state
作为依赖项,因为您在其中设置了相同的值,相反,您可以使用,以便获取state的先前值,而不是引用中心值
const { onChangeInput } = useCreateAccount()
<form>
<input name="name1" onChange={onChangeInput}>
<input name="name2" onChange={onChangeInput}>
</form>
const onChangeInput: ChangeEventFunction = useCallback(({ target }) => {
if (!target.files) {
return setState(prevState => ({ ...prevState, [target.name]: target.value }));
}
setState(prevState => ({ ...prevState, [target.name]: target.files[0] }))
}, [])