首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >呈现数组时的React-typescript问题

呈现数组时的React-typescript问题
EN

Stack Overflow用户
提问于 2020-10-31 05:58:00
回答 1查看 31关注 0票数 0

我开始学习typescript和react,遇到了一个渲染数组的问题。添加到数组中可以正常进行,但不会显示元素。我尝试了不同的方法,比如用.foreach渲染数组,但也不起作用。我做错了什么?下面是我的main element App的一部分

代码语言:javascript
复制
export interface IToDoElement {
  completed: boolean;
  id: string;
  toDoText: string;
  date: Date;
  deadlineDate?: Date; 
  keywords?: string; 
}

const App: React.FC = () => {
  const [ToDos, setToDos] = useState<Array<IToDoElement>>([]);

  function setNewToDo(text: string): void {
    let currentToDoList: Array<IToDoElement> = ToDos;

    currentToDoList.push({
      completed: false,
      id: uuid(),
      toDoText: text,
      date: new Date(),
    });
    setToDos(currentToDoList);
  }

  return (
    <div>
      <h1 className="h1 textAlignCenter">ToDo List</h1>
      <div className="divBorder">
        <h5 className="h5 ml-2 mt-2">Enter the action to add to the list:</h5>
        <ToDoForm onSubmit={setNewToDo} />
        <ToDoList currentToDoList={ToDos} />
      </div>
    </div>
  );
};

export default App;

下面是我的列表显示的代码

代码语言:javascript
复制
import React from "react";
import { IToDoElement } from "../App";

import "../App.css";

interface IProps {
  currentToDoList: Array<IToDoElement>;
}

export const ToDoList: React.FC<IProps> = (props) => {
  return (
    <div>
      {props.currentToDoList.map((value) => {
        return (
          <div key={value.id} className="parentFlex">
            <button className="btn-dark">{value.toDoText}</button>
          </div>
        );
      })}
    </div>
  );
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-31 06:01:01

当您使用.push时,您正在就地修改数组,而React不能告诉您数组已经更改。

你只需要做:

代码语言:javascript
复制
setToDos([...currentToDoList]);

它应该是有效的。

例如,在下面的代码片段中,当您将x与y进行比较时,结果为true。但是如果你把x和[...y]比较,你得到的结果是假的。

代码语言:javascript
复制
const x = [1,2]

let y = x;

y.push(3)

console.log(x === y);
console.log(x === [...y]);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64616290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档