reactjs 当页面加载时,如何正确设置React状态值?

qxsslcnc  于 2022-12-18  发布在  React
关注(0)|答案(2)|浏览(160)

我有一个问题,并在下面留下CodeSandbox链接。我有3个复选框。我根据复选框的选中状态更新count值。默认情况下选中其中2个复选框。我有一个dummyArray,并发送namevalueisPreselected值 所以当页面加载时,我的count值应该是10,但它是5。如果第一次加载时选中了复选框,我尝试用useEffect增加count值,但我猜它只添加了第一个复选框的值,不是第二个。我还尝试在页面加载时foreach整个数组,如果isPreselected值为true,则更新count值,但结果仍然相同。如何修复此问题?
代码沙箱链接:https://codesandbox.io/s/silly-liskov-egpq2s

z6psavjg

z6psavjg1#

在useEffect回调中,您可以迭代dummyArray并将预先选择的每个复选框的值添加到计数中。

import Checkbox from "./Checkbox";

const dummyArray = [
  { name: "checkbox 1", value: 5, isPreselected: true },
  { name: "checkbox 2", value: 5, isPreselected: true },
  { name: "checkbox 3", value: 5, isPreselected: false }
];

export default function App() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    const initialValue = 0;
    const preselectedValues = dummyArray
      .filter((item) => item.isPreselected)
      .map((item) => item.value);
    const total = preselectedValues.reduce(
      (accumulator, currentValue) => accumulator + currentValue,
      initialValue
    );
    setCount(total);
  }, []);

  return (
    <div>
      {dummyArray.map((item, index) => (
        <Checkbox
          key={index}
          name={item.name}
          value={item.value}
          isPreselected={item.isPreselected}
          count={count}
          setCount={setCount}
        />
      ))}
      <p>{count}</p>
    </div>
  );
}
xurqigkl

xurqigkl2#

问题出在setState的初始值。应该是10,但在本例中设置为0。要为每个选中的框计数5,可以执行以下操作:

const [count, setCount] = useState(dummyArray.filter(item=>item.isPreselected).length * 5);

它将计算选中的复选框并乘以5。

相关问题