javascript - Reactjs - 参数类型不可分配给参数类型

标签 javascript html reactjs react-hooks state


我正在学习一些 Reactjs 类(class),并遇到了本类(class)中似乎没有出现的问题。

Customer.js:

import React, { useState } from "react";

const Customer = () => {

    const [customerState, setCustomerState] = useState(
        {
            names: ['Martin', 'Andrea', 'Carol'],
            pickedName: 'Martin'
        }
    );

    const switchName = () => {
        const namePool = customerState.names;
        const number = Math.floor(Math.random()*3); //losowanie liczby w zakresie 0-2
        setCustomerState({pickedName: namePool[number]});
    }

    return(
        <div>
            <h2>Customer:</h2>
            <h3>{customerState.pickedName}</h3>
            <button onClick={switchName}>Change name</button>
        </div>
    );
}

export default Customer;

提到的代码给了我行 setCustomerState({pickedName: namePool[number]});:

的错误

enter image description here

在浏览器控制台中我可以看到:
enter image description here

最佳答案

您在更新状态时忘记了 names 字段。只需使用例如包含它即可对象解构

setCustomerState((prevState) => ({
   ...prevState,
   pickedName: namePool[number],
}));

您的应用程序在 namePool[number] 行中崩溃,因为 namePool (customerState.names) 未定义 .

const Customer = () => {
  const [customerState, setCustomerState] = useState({
    names: ['Martin', 'Andrea', 'Carol'],
    pickedName: 'Martin',
  });

  const switchName = () => {
    const namePool = customerState.names;
    const number = Math.floor(Math.random() * 3);

    setCustomerState((prevState) => ({
      ...prevState,
      pickedName: namePool[number] as string,
    }));
  };

  return (
    <div>
      <h2>Customer:</h2>
      <h3>{customerState.pickedName}</h3>
      <button onClick={switchName}>Change name</button>
    </div>
  );
};

关于javascript - Reactjs - 参数类型不可分配给参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74206357/

相关文章:

javascript - 浏览器的 "Previous"按钮位置改变了吗?

javascript - 对 JavaScript 对象数组中的日期事件进行排序,并与当前日期进行比较以显示在表单中

html - 如何使用 FlexBox 制作具有百分比高度的包裹 div

reactjs - 一页上有多个 React 微前端

javascript - 函数在不应该异步运行时异步运行

javascript - 什么时候可以迭代一个空数组?

javascript - 使用 javascript 单击刚刚打开的页面上的链接

javascript - 在 React 中动态选择一个 json 键值对

javascript - 语义用户界面下拉列表被输入字段覆盖

javascript - Google Maps Geocoder API 的 promise