我有一个功能组件,带有一个名为“checked”的状态钩子,它是一个用于复选框列表的布尔数组。单击复选框时,我有一个更新状态的事件处理程序,因此复选框将呈现复选框或空框。
根据我的函数中的console.logs,状态正在更新,但是浏览器中的复选框没有响应,开发工具确认状态没有更新。如果我使用开发工具手动切换状态,复选框工作正常,所以我认为这是状态不更新的问题。任何建议将非常感谢!
import React, { useState, useContext } from 'react';
export default function MessengerCheckboxes() {
const [checked, setChecked] = useState([false, false, false]);
...
const handleChangeChild = (event) => {
console.log('Currently state is: ' + checked); // Currently state is: [false, false, false]
let index = parseInt(event.target.id.slice(0, 1));
let localChecked = checked; //
localChecked[index] = !checked[index];
console.log('State should be: ' + localChecked); //State should be: [true, false, false] [[for example]]
setChecked(localChecked);
setTimeout(() => { // Added setTimeout for troubleshooting to make sure I wasn't calling state too quickly after setting it
console.log('State is now: ' + checked); // State is now: [true, false, false] [[but won't trigger re-render and dev tools show state is [false, false, false]]
}, 1 * 1000);
};
}
我的控制台的图像。日志
我的开发工具的图像
提前向你表示衷心的感谢!
好吧,你应该读到那些评论,你不应该改变国家。所以为了处理这种情况,我通常会这样做:-
setChecked(data => ({
...data,
[ind]: !checked[ind]
}))
你不应该像那样更新状态。
在这种情况下,需要更复杂的状态对象。我喜欢使用对象来保持列表中每个项目的状态。检查此链接:https://codesandbox.io/s/checkbox-state-https-stackoverflow-com-questions-69680938-react-js-state-not-updating-in-functional-component-di0dd
import "./styles.css";
import { useState } from "react";
export default function App() {
// 1.
const stateObj = {
cb1: false,
cb2: false,
cb3: false
};
const [cbState, setCbState] = useState(stateObj);
const handleCb = (event) => {
console.log(event.target.name, event.target.checked);
// 4.
setCbState({ ...cbState, [event.target.name]: event.target.checked });
};
return (
<div>
<input
type="checkbox"
name="cb1" // 2.
onChange={handleCb}
value={cbState["cb1"]} // 3.
/>
<input
type="checkbox"
name="cb2"
onChange={handleCb}
value={cbState["cb2"]}
/>
<input
type="checkbox"
name="cb3"
onChange={handleCb}
value={cbState["cb3"]}
/>
</div>
);
}
因此,对于外卖,分步骤进行:
状态['key']
设置html元素的值属性-括号表示法。这就是实现受控组件的方法name
和checked
属性来实现它
我创建了一个包含登录组件和注册组件的签名页面组件。我的问题是,我如何传递一个onhtml函数从父到子,以便更改我的父组件(签名页组件)的状态?我期望的是,通过单击子组件中的按钮,可以切换父组件的活动状态,并根据活动状态更改样式。我试图通过一个处理功能从父到子,但它不能很好地工作。 有什么解决办法吗? codesandbox中的详细信息:https://codesandbox.io/s/wizard
问题内容: 我正在尝试将在这里找到的这个很棒的动画转换为React可重用的组件。看来此组件将需要一个父组件作为画布,而许多子组件则为。 出于性能方面的考虑,将它们变成无状态组件可能会更好,因为会有很多这样的组件。我不熟悉制作无状态组件,并且想知道应该在哪里定义和中定义的和函数。 无状态组件的功能是在组件内部还是外部?换句话说,以下哪个更好? 1: 2: 每种都有什么优点/缺点,其中哪一种对我的特定
我目前有一个类组件和一个函数组件在我的主组件 以下是的代码段: 类组件 功能部件 因此,我想做的是通过按钮的onClick操作,从功能组件更改类组件的状态。我怎样才能完成任务?
我正在从一个文件导出常量并将其导入另一个文件,如下所示: 常数.js App.js 我希望我的初始状态是在构造函数中设置的,然后在componentWillMount上,我希望使用常量文件中的值设置状态,然后再围绕组件和流添加进一步的逻辑。 但是,我发现,我的状态没有被更新,如果我在调用setState之后记录控制台日志,状态仍然没有定义,如果我引入一个方法,需要state中的值,那么在执行堆栈的
本文向大家介绍在React.js功能组件中使用useEffect(),包括了在React.js功能组件中使用useEffect()的使用技巧和注意事项,需要的朋友参考一下 React钩子useEffect有助于在React的功能组件中添加componentDidUpdate和componentDidMount组合生命周期。 到目前为止,我们知道我们只能在有状态组件中添加生命周期方法。 要使用它,我
在不使用类的情况下,如何在react的功能性无状态组件中使用PropTypes?
我有一个带有两组按钮(功能和目标)的界面。当我点击一个按钮时,我希望它从一个团队转到另一个团队。我正在用react和redux实现这一点。我唯一的问题是,当状态更新并且我成功地记录了更新的状态时,除非我使用forceUpdate(),否则组件不会更新。我不明白的是,既然状态更新成功,组件不应该自动重新渲染吗? 一些js 正如您所看到的,当我单击一个按钮时,我触发updateLists函数,该函数将
问题内容: 以下是两个 几乎 完成相同任务的React组件。一个是功能;另一个是功能。另一个是一类。每个组件都有一个带有异步侦听器的组件,该侦听器会在更改时进行更新。我需要能够像在经典组件中那样在功能组件中进行访问。 万一有一个以上的情况,不应在全球范围内。 不能包含在功能范围内,因为每次渲染时都会重新初始化。也不应处于状态,因为更改时组件无需呈现。 不会出现此问题,因为它在组件的整个生命周期中都