【发布时间】:2022-01-10 08:34:33
【问题描述】:
我正在努力使我的代码简洁易读。所以我决定创建一个自定义挂钩来存储我的useStates。然后我创建了一个新文件来存储我的事件监听器。现在,我有三个文件:Page.js、useStates.js 和 Listeners.js。
问题是我不能在事件监听器中使用我的状态。
我尝试将我的状态存储在useStates.js 的全局范围变量中,并使用getter 传递它们。但它不起作用,因为更新状态并没有改变页面(但它确实重新渲染)。
useStates.js:
import react, { useState } from 'react';
export default () => {
const [myState, setMyState] = useState(false);
return { myState, setMyState };
}
Page.js:
import react from 'react';
import useStates from './useStates';
import { someActionListener } from './listeners';
export default () => {
const states = useStates();
return <SomeComponent
somProp={states.myState}
onSomeAction={ someActionListener } />
}
Listeners.js:
export const someActionListener = (e) => {
// This should be done
states.setMyState(!states.myState);
}
【问题讨论】:
-
请分享您正在使用的代码的minimal reproducible example。
-
同意...我们无法帮助调试我们看不到的代码。还请尝试更详细地描述具体是什么不起作用。是否有任何错误,您采取了哪些调试步骤,是否有重现任何问题的步骤等...
-
@evolutionxbox 完成。
-
您只能在反应组件或钩子中使用状态..而不是标准 JS。由于您的 Listeners.js 不是反应组件而不是钩子,因此您不能在其中使用状态
-
onSomeAction={e => someActionListener(e, states)}
标签: javascript reactjs react-hooks frontend