等待每个完成使用setState的反应

时间:2018-02-28 03:56:05

标签: javascript reactjs

如何在foreach中等待setState完成然后显示渲染?

class App extends Component {
  componentDidMount() {
    someArrOfObject.forEach(o => {
      this.setState({
        [`list_for_${o.id}`]: o.val
      })
    })
  }

  render() {

    const { selected_id } = this.state
    const selected_list = this.state[`list_for_${selected_id}`]

    return selected_list.map(o => <div>{o.val}</div>)
  }
}

3 个答案:

答案 0 :(得分:3)

class App extends Component {
  componentDidMount() {
    let newState = {};
    someArrOfObject.forEach(o => {
      {
        newState[`list_for_${o.id}`] = o.val;
      })
    })
    this.setState(newState);
  } 
  render() {

    const { selected_id } = this.state
    const selected_list = this.state[`list_for_${selected_id}`]

    return selected_list.map(o => <div>{o.val}</div>)
  }
}

答案 1 :(得分:0)

如果您的意思是在完成对this.state的所有更改后希望React呈现,那么您不必执行任何操作。在实际更改this.state之前,React会等待对state进行多项更改。然后只调用渲染函数。

如果你想要在调用render()之前加载所有内容,那么你想要的是componentWillMount()而不是componentDidMount()

希望有所帮助。

答案 2 :(得分:0)

您需要先建立自己的州,然后再拨打AB = B-A; AC = C-A; AD = D-A; % projection of vector X onto vector Y. proj = @(X,Y) Y * dot(X,Y)/dot(Y,Y); % get the desired distances L2 = norm(AC - proj(AC,AB)); L1 = norm(proj(AD,AB));

像这样的东西

setState