javascript - React 动态更新数组并将其传递给子组件

标签 javascript arrays reactjs react-router

我在父组件中有一个数组,在从 api 读取一些 JSON 后需要动态更新该数组。 我正在使用 React Router,我能够将数组传递给子组件并根据数组值添加 css 类,但我似乎无法弄清楚如何正确更新我的数组并将 panelone 的数组值更改为关闭。

父组件:

import React, { Component } from 'react';
import { Route, NavLink, HashRouter } from "react-router-dom";
import Child from './components/Child';

class App extends Component {

  arr = {
    panelone : 'on',
    paneltwo: 'off'
  };

  componentDidMount() {
    // Some function to get JSON... 
      this.arr.panelone = 'off'; // ???
    //...
  }

  render() {

    return (
      <div className="App">
        <TopBar />
        <HashRouter>
          <div>
            <nav>
              <ul className="header">
                <li><NavLink exact to="/">Overview</NavLink></li>
              </ul>
            </nav>
            <div className="main-container">
              <Route 
                exact path="/" 
                render={(props) => <Child arr = {this.arr} />} 
              />
            </div>
          </div>
        </HashRouter>
      </div>
    );
  }
}

子组件:

import React, { Component } from 'react';
import { Link } from "react-router-dom";

class Child extends Component {

  render() {

    return (
      <div>
      //This is working OK and css class "on" is added from panelone val
                <div className={'item ' + this.props.arr.panelone}>
                  <p>Some Title</p>
                </div>
            </div>
    );
  }
}

export default Child;

使用 React Router 时动态更新 arr 和更新子组件的正确方法是什么?

最佳答案

我将使用状态来实现这一点,然后调用 setState() 进行更新。你读过这个吗:https://reactjs.org/docs/state-and-lifecycle.html#adding-local-state-to-a-class

您无法直接设置或更新 props。我会做这样的事情:

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      arr = {
        panelone : 'on',
        paneltwo: 'off'
      }
    };
  }

  componentDidMount() {
    this.setState({
      arr: {
        ...this.state.arr,
        panelone: 'off'
      }
    });
  }

关于javascript - React 动态更新数组并将其传递给子组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55227087/

相关文章:

javascript - 如何使用 keydown 函数制作 JavaScript 待办事项列表

php - 如何使用 PHP 将多维关联数组的缺失值添加到 HTML 表中

javascript - 在 React 中,使用函数式组件和仅返回 React 节点的函数有什么区别?

javascript - Webpack 在与 typescript 的 react 中抛出错误 "You may need an appropriate loader"

javascript - For循环不显示html中的任何数据

javascript - 使用按钮 onclick 强制触发事件监听器

javascript - Angular 2 ContentChildren选择宿主元素

java - 如何在数组中找到总和为 k 的两个元素

javascript - 为什么在将 next.js 与环境变量一起使用时我的 API key 可见?

javascript - 从 Node.js 更新 MySQL - 如何判断零行是否受到影响?