【发布时间】:2020-09-01 03:43:32
【问题描述】:
我是反应钩子的新手,在useEffect 我正在创建函数,该函数将在单击同一组件内的按钮时被调用。但我面临一个问题,每次它使用一个旧道具值,而不是新道具值。我不明白为什么。
如果我在 state 中分配 prop,它会正常工作,即使我没有使用 state 值,只是设置。
const defaultCalls = () => {
let fn = (e) => console.log('This is default click fn.');
return {
overrideClickCall: (newFn) => {
fn = newFn
},
clickFn: (e) => {
fn(e);
}
}
}
let dCalls = defaultCalls();
const anotherFn = (e, userName) => {
console.log(userName);
}
const MyComp = props => {
let newFn = (e) => anotherFn(e, props.userName)
//let [state, setState] = useState(props.userName);//on uncommenting it will work fine
useEffect(() => {
//setState(props.userName); //on uncommenting it will work fine
dCalls = defaultCalls();
dCalls.overrideClickCall(newFn);
console.log('override default fn')
}, [props.userName]);
return (
<input type="button" onClick={dCalls.clickFn} value="Click Me" />
)
}
export { MyComp }
【问题讨论】:
-
“在这里尝试”请使用 Stack Snippets(
[<>]工具栏按钮)将您的可运行示例在这里,现场。 Stack Snippets 支持 React,包括 JSX; here's how to do one. -
对于您所说的您正在尝试执行的操作,该代码看起来非常复杂。
defaultCalls、dCalls等的目的是什么?只需创建一个将用作点击处理程序的函数,您不必做任何特别的事情。如果你愿意,你可以用useCallback记住它,但通常这不是必需的。似乎您试图做的不仅仅是拥有一个点击处理程序......? -
很快就会把sn-p放在这里,默认调用。可以说它是 3rd 方库,做一些复杂的操作,并且还提供了
overriding的功能 -
恐怕我无法理解您在该评论中的意思。
-
考虑
defaultCalls就像我正在使用的一个库,它提供了一种方法,以便您可以覆盖默认的click处理程序。我覆盖了我的组件的useEffect。
标签: javascript reactjs react-hooks jsx use-effect