如何在React中setState一个类对象?

时间:2018-05-24 23:26:51

标签: javascript reactjs

我正在修改我的类中的一个对象数组,并且只有在按键发生时我才能直观地呈现此对象。

class Example extends React.Component {
    constructor(props) { 
       super(props); 
       this.myArr = []; // this is an array of objects 
    }

    render() {  
       return (
        ???
       );
    }
}

现在我用许多不同的方法修改this.myArr的内容。只有当我准备好(在按键或其他事件上)我才能渲染它。

现在在我的render()中我应该引用 this.myArr ,然后在我想强制重新渲染时使用this.forceUpdate()

或者我应该将myArr移动到 this.state.myArr ,并在我的方法中修改this.state.myArr,当我准备好显示它时,在我的render()引用 this.state.myArr ,并以某种方式强制重新注册this.setState(myArr: this.state.myArr);

6 个答案:

答案 0 :(得分:2)

***第二次更新 - 我想这可能就是你想要的。显然,您需要为鼠标点击事件添加大量逻辑。它应该指出你正确的方向。

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.myArr = [];

    this.state = {
      myArr: [{ width: 10 }, { width: 20 }], // header widths
    };
  }

  // call changeHeaders when needed
  // it will update state, which will cause a re-render
  changeHeaders = (column, newWidth) => {
    const newArr = [...this.state.myArr];

    if (newArr[column]) {
      newArr[column].width = newWidth;
    }

    this.setState({ myArr: newArr });
  }

  renderArray = () => {
    return this.state.myArr.map(({ width }) => <div>{width}</div>);
  }

  render() {
    return (
      <div>
        {this.renderArray()}
      </div>
    );
  }
}

答案 1 :(得分:0)

无论哪种方式都可行,但我认为更好的做法是使用this.state来保存数组并使用this.setState()强制重新渲染并在keypress事件回调中调用this.setState

以下是更新数组值的方法 - Correct modification of state arrays in ReactJS

有一个非常好的解释,为什么你应该避免在Chris回答的here中使用this.forceUpdate()。

答案 2 :(得分:0)

在这种情况下,您应该使用州。 State旨在用于影响组件外观的任何数据。请记住,可能不会直接修改您的州,它是反模式。相反,您应该创建数组的副本并使用该修改后的副本更新状态。像这样:

class Example extends React.Component {
  constructor(props) { 
    super(props); 
    this.state = {myArr: []}; // this is an array of objects 
  }

  mutateArraySomehow() {
    const nextArr = [...this.state.myArr];
    nextArr.push('heyyoooo');
    this.setState({myArr: nextArr});
  }

  render() {  
    return (
      ???
    );
  }
}

答案 3 :(得分:0)

我就是这样做的

class Example extends React.Component {
   constructor(props) { 
      super(props);
      this.state = {
       myArr: [],
       display: false
      }
   }

   render() {
      if(this.state.display) {
       return (
          <MyComponent onKeyPress=(ev=>{
              this.setState({display: true})
          })
         />
       );
      } else {
       return (<div></div>)
      }
   }
}

答案 4 :(得分:0)

当对数组元素进行修改时,需要将状态的setState设置为true。这将执行条件呈现并显示修改后的数组。

mytext="<html><head></head><body>
<div id='mycustomelement'>
{  ('.blog-data')response //how to get this  }
</div></body></html>"

答案 5 :(得分:0)

简而言之,在类中定义 state 如下:

state: {
   firstName: String
} = {
   firstName: ''
}

render 函数中,你会这样做:

this.setState({ firstName: 'Junior' })