迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > React >

在 React TypeScript 中键入 useState 作为字符串数组

作者:迹忆客 最近更新:2023/01/12 浏览次数:

要在 React 中将 useState 钩子键入为字符串数组,请使用钩子的泛型,例如 const [names, setNames] = useState<string[]>([])。 状态变量可以初始化为空数组或字符串数组,并且只接受字符串值。

import {useState} from 'react';

const App = () => {
  // 👇️ const names: string[]
  const [names, setNames] = useState<string[]>([]);

  return (
    <div>
      <button onClick={() => setNames(prevNames => [...prevNames, 'Bob'])}>
        Add name
      </button>

      {names.map((element, index) => {
        return (
          <div key={index}>
            <h2>{element}</h2>
          </div>
        );
      })}
    </div>
  );
};

export default App;

我们使用泛型来正确键入 useState 钩子,同时使用空数组初始化钩子。

React TypeScript 中键入 useState 作为字符串数组

如果我们没有使用通用的,例如 useState<string[]>([]) 键入钩子时,状态变量的类型将是 never[],换句话说,一个永远不会包含任何元素的数组。

即使将一个空字符串传递给数组,TypeScript 也能推断出状态变量的类型。

import {useState} from 'react';

const App = () => {
  // 👇️ const names: string[]
  const [names, setNames] = useState(['']);

  return (
    <div>
      <button onClick={() => setNames(prevNames => [...prevNames, 'Bob'])}>
        Add name
      </button>

      {names.map((element, index) => {
        return (
          <div key={index}>
            <h2>{element}</h2>
          </div>
        );
      })}
    </div>
  );
};

export default App;

请注意 ,我们甚至不必使用泛型来键入状态变量。 TypeScript 能够根据提供的初始值推断类型。

但是,最好始终显式键入 useState 钩子,尤其是在使用数组和对象时。

如果我们尝试向状态数组添加不同类型的值,我们会得到类型检查错误。

import {useState} from 'react';

const App = () => {
  // 👇️ const names: string[]
  const [names, setNames] = useState<string[]>([]);

  // ⛔️ Argument of type '(prevNames: string[]) => (string | number)[]' is not
  // assignable to parameter of type 'SetStateAction<string[]>'.
  setNames(prevNames => [...prevNames, 1000]);

  return (
    <div>
      <button onClick={() => setNames(prevNames => [...prevNames, 'Bob'])}>
        Add name
      </button>

      {names.map((element, index) => {
        return (
          <div key={index}>
            <h2>{element.toUpperCase()}</h2>
          </div>
        );
      })}
    </div>
  );
};

export default App;

该示例显示尝试将数字添加到类型为 string[] 的状态数组如何导致类型检查器出错。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Node.js 与 React JS 的比较

发布时间:2023/03/27 浏览次数:137 分类:Node.js

本文比较和对比了两种编程语言,Node.js 和 React。React 和 Node.js 都是开源 JavaScript 库的示例。 这些库用于构建用户界面和服务器端应用程序。

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便