首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重新呈现.map()列表

如何重新呈现.map()列表
EN

Stack Overflow用户
提问于 2020-11-21 17:20:48
回答 5查看 65关注 0票数 1

当我单击一个将数组的第一个元素发送到最后一个位置的按钮时,我正在尝试重新呈现一个列表,但是,当我单击该按钮时,组件不会重新呈现,即使console.log显示数组已经更改:codesandbox

代码语言:javascript
复制
import React, { useState } from "react";

const DailySchedule = () => {
  const [exerciseList, setExerciseList] = useState([
    "exercise 1",
    "exercise 2",
    "exercise 3"
  ]);

  return (
    <div>
      <section>
        <h2>Warm-up</h2>

        <ul>
          {exerciseList.map((exrcs, idx) => {
            return (
              <li>
                {exrcs}{" "}
                {idx === 0 && (
                  <button
                    onClick={() => {
                      exerciseList.push(exerciseList.shift());
                      setExerciseList(exerciseList);
                      console.log(exerciseList);
                    }}
                  >
                    Done
                  </button>
                )}
              </li>
            );
          })}
        </ul>
      </section>
    </div>
  );
};

export default DailySchedule;
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-11-21 17:24:13

这是因为状态中的数组引用没有更改。像这样更新setState调用,

代码语言:javascript
复制
          <button
            onClick={() => {
              exerciseList.push(exerciseList.shift());
              setExerciseList([...exerciseList]);
              console.log(exerciseList);
            }}
          >
            Done
          </button>
票数 1
EN

Stack Overflow用户

发布于 2020-11-21 17:25:27

这是因为您正在直接修改exerciseList数组,而您不应该这样做,因为状态更新将看到列表是相同的,并且不会触发重新呈现。而是制作阵列的副本,然后使用setExerciseList

代码语言:javascript
复制
const newList = [...exerciseList]
newList.push(newList.shift())
setExerciseList(newList)
票数 2
EN

Stack Overflow用户

发布于 2020-11-21 17:26:55

此问题是因为数组引用未更改。

代码语言:javascript
复制
  onClick={() => {
    const list = [...exerciseList]
    list.push(list.shift());
    setExerciseList(list);
  }}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64941536

复制
相关文章

相似问题

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