我有一份幸存者名单:

const survivorsList = [
  {
    id: 1,
    name: "Ace Visconti",
    image_path: "static/survivors/ace_visconti.jpg",
  },
  {
    id: 2,
    name: "Vittorio Toscano",
    image_path: "static/survivors/vittorio_toscano.jpg",
  },
  {
    id: 3,
    name: "Nancy Wheeler",
    image_path: "static/survivors/nancy_wheeler.jpg",
  },
  {
    id: 4,
    name: "Claudette Morel",
    image_path: "static/survivors/claudette_morel.jpg",
  },
];

我try 在应用程序中的render函数中访问列表:

  renderSurvivorName = () => {

    const randomSurvivor = this.state.survivorsList.filter(
        (survivor) => survivor.name === "Ace Visconti"
    );

    console.log("Random Survivor: " + JSON.stringify(randomSurvivor))
    console.log("Survivor Name: " + randomSurvivor.name);

    // return randomSurvivor['name'];
    return randomSurvivor.name;
  };

当我查看控制台时,我看到:

Random Survivor: [{"id":1,"name":"AceVisconti","image_path":"static/survivors/ace_visconti.jpg"}]. App.js:62
Survivor Name: undefined. App.js:63

Reaction应用程序的完整代码很简单,以下是重要的情况:

import React, { Component } from "react";

const survivorsList = [
  {
    id: 1,
    name: "Ace Visconti",
    image_path: "static/survivors/ace_visconti.jpg",
  },
  {
    id: 2,
    name: "Vittorio Toscano",
    image_path: "static/survivors/vittorio_toscano.jpg",
  },
  {
    id: 3,
    name: "Nancy Wheeler",
    image_path: "static/survivors/nancy_wheeler.jpg",
  },
  {
    id: 4,
    name: "Claudette Morel",
    image_path: "static/survivors/claudette_morel.jpg",
  },
];

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      survivorsList: survivorsList,
      survivorName: "Ace Visconti"
    };
  }

  // displayRandom = (status) => {
  //   if (status) {
  //     return this.setState({ randomCalculated: true });
  //   }
  //
  //   return this.setState({ randomCalculated: false });
  // };

  renderSurvivorTitle = () => {
    return (
        <div className="nav nav-tabs">
        <span
            className={this.state.randomCalculated ? "nav-link active" : "nav-link"}
            onClick={() => this.displayRandom(true)}
        >
          Survivor
        </span>
        </div>
    );
  };

  renderSurvivorName = () => {

    const randomSurvivor = this.state.survivorsList.filter(
        (survivor) => survivor.name === "Ace Visconti"
    );

    console.log("Random Survivor: " + JSON.stringify(randomSurvivor))
    console.log("Survivor Name: " + randomSurvivor.name);

    // return randomSurvivor['name'];
    return <div>Survivor: {this.state.survivorName}</div>;
  };

  render() {
    return (
        <main className="container">
          <h1 className="text-white text-uppercase text-center my-4">Todo app</h1>
          <div className="row">
            <div className="col-md-6 col-sm-10 mx-auto p-0">
              <div className="card p-3">
                <div className="mb-4">
                  <button
                      className="btn btn-primary"
                  >
                    Select Random Survivor
                  </button>
                </div>
                <div>{this.renderSurvivorTitle()}</div>
                <div>{this.renderSurvivorName()}</div>
                {/*<div>{"Ace Visconti"}</div>*/}
              </div>
            </div>
          </div>
        </main>
    );
  }
}

export default App;

正如您可以从我的包中看到的那样,我使用的是最新的react .json:

{
  "name": "dbd-randomizer-ui",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "latest",
    "@testing-library/react": "latest",
    "@testing-library/user-event": "latest",
    "react": "latest",
    "react-dom": "latest",
    "react-scripts": "latest",
    "web-vitals": "latest",
    "bootstrap": "latest",
    "reactstrap": "latest"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

如您所见,我try 使用点表示法和[]表示法来访问该字段.我不明白怎么会不设置场地.这两次通话之间的范围有没有可能发生变化?它是否在两次调用之间重新加载页面,并且没有设置值?

我找到了这个低价article.但由于我还没有进行API调用,我认为我不应该需要异步.我说错了吗?

推荐答案

randomSurvivor不是幸存者对象,它是符合条件survivor.name === "Ace Visconti"的对象array.如果要返回单个对象,则应使用find,而不是fitler:

const randomSurvivor = this.state.survivorsList.find(
    (survivor) => survivor.name === "Ace Visconti"
);

Javascript相关问答推荐

Node.JS ws包中是否有Webocket的错误代码列表?

为什么子组件没有在reaction中渲染?

在JavaScript中,如何将请求的回调函数的结果合并到运行的代码中?

积分计算和 colored颜色 判断错误

如何在JavaScript中在文本内容中添加新行

具有相同参数的JS类

使用TMS Web Core中的HTML模板中的参数调用过程

如何才能拥有在jQuery终端中执行命令的链接?

react/redux中的formData在expressjs中返回未定义的req.params.id

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

将自定义排序应用于角形数字数组

使用Java脚本导入gltf场景并创建边界框

IF语句的计算结果与实际情况相反

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

使用getBorbingClientRect()更改绝对元素位置

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

通过跳过某些元素的对象进行映射

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

如何设置时间选取器的起始值,仅当它获得焦点时?