当我们在ReactJS状态上存储函数时,我在这里遇到了一些非常奇怪的事情。
我用钩子创建了一个react状态,其中包含:
由于钩子本身在setState期间没有回调,所以我使用此方法在状态更改后的useEffect期间切换回调。
我在setState期间传递的回调是打印state.number和secondNumber值的值。设置状态完成后,state.number的值应为4,secondNumber的值应为15(如果我要在useEffect开始时对console.log进行测试)。
但是触发回调函数的state.callback()仍然打印出原始数字,即state.number=2和secondNumber=10。
我觉得很奇怪,因为回调是在state.number的值之后调用的,第二个数字是更改的。
有人知道这里的代码会发生什么吗?
function App(){
const [state, setState] = useState({
number : 2,
callback : null
});
let secondNumber = 10;
useEffect(() => {
if (state.callback){
secondNumber = 15;
state.callback();
}
}, [state]);
const toggleButton1 = () => {
setState({
number : 4,
callback : () => {
console.log('state number',state.number);
console.log('second number', secondNumber);
}
})
}
return (
//button trigger function toggleButton1
)
}
export default App;
const toggleButton1 = () => {
setState({
number : 4,
callback : () => {
console.log('state number', state.number);
console.log('second number', secondNumber);
}
})
}
这将包含存储回调中当前呈现周期的当前状态和第二个
值。稍后调用它将在存储时使用该值。
只需在effect钩子中执行您想要对更新状态执行的操作。功能组件状态更新实际上没有基于类的组件的setState
回调参数的等价物,具有适当依赖关系的useffect
是其等价物。
function App(){
const [state, setState] = useState({
number : 2,
callback : null
});
let secondNumber = 10;
useEffect(() => {
console.log('state number', state.number);
console.log('second number', secondNumber);
}, [state.number]);
const toggleButton1 = () => {
setState({
number : 4,
})
}
return (
//button trigger function toggleButton1
)
}
export default App;
仅供参考,根据定义,secondNumber
将被重置/重新定义回每个渲染周期10
,您可以在每个周期内对其进行变异,但每次都会重置。
假设我们有以下设置,其中父组件有两个子组件C1和C2: 这里是代码和代码: 注意,在C2的构造函数中,我们引用了。如果我们将该变量设置为类属性,如,React即使在单击update按钮并且示例的this.state.data已经更改之后,也无法更新C1。我已经注释掉了直接引用this.props.data的行。
我有一个函数反应组件,它有一个从10000开始到0的计数器。 我正在组件安装期间使用useEffect挂钩设置setInterval回调。然后,回调更新计数器状态。 但是不知道为什么,值从来没有减少过。每次回调运行为10000。 (我正在使用react 功能组件如下所示: 这里是codesandbox的链接:链接
很抱歉,标题令人困惑,但下面是发生的情况: 在中,我正在使用React钩子设置状态。一旦组件挂载(即没有依赖项的),我将实例化两个对象,其中第一个参数作为一个回调函数来递增状态,第二个参数是调用回调函数的
问题内容: 与Firebase问题相比,这更像是JavaScript关闭问题。在以下代码中,Firebase回调无法识别父作用域中的变量myArr。 问题答案: 回调函数可以很好地识别/修改。问题是,当执行标记为“不工作”的标签时,回调尚未触发。 让我们稍微更改一下代码: 现在,可能会更容易了解发生了什么。 您注册一个侦听器,该侦听器将调用添加到Firebase中的每个帖子 这将导致对服务器的调用
问题内容: 我正在尝试通过jQuery AJAX调用预加载一些图像,但是在将(url)字符串传递到AJAX调用的成功函数内的函数时遇到了实际问题(如果有意义)。 这是我的代码,原样: 可以看到我(失败的)尝试将url传递到调用中- 最终得到了递增整数的值。不确定为什么或与这些东西有什么关系,也许是jpg文件的数量? …无论如何,它当然应该在我原始的urls数组中使用单个值。 感谢您的帮助-我似乎总
问题内容: 很多人说评论中的要求太多,这让我犹豫不决,但是我仍然没有在他们的答案中找到解决方案,主要是因为(1)他们通常使用jQuery,而(2)问题通常包含我不理解的技术。 我有一个函数,里面有一个变量。变量被分配了一个功能。我敢肯定,这个概念不是AJAX独有的,但这是我正在使用的上下文(如果有区别的话)。 我想将变量传递给函数。但是,由于没有原始函数声明,如何指定参数?我能做到吗? 问题答案: