如何在Reactjs中从setstate初始化?

时间:2017-10-26 08:57:37

标签: javascript reactjs setstate

I am able to initialize setstate still the values are taking from state only

_handleClickFilter(value, xname, chartId){
    console.log("dataSourceId", this.state.dataSource);
    this.setState({
          filterData: [{
          filter: "equals",  
          value:value ,
          attribute:xname, 
        }]
        });

    let filterdefinitions = {
        dataSourceId : "59ef50d6e4b054efd6d8aa53",
        filterDefinitions: this.state.filterData,
      }

      let data = {
        filterDefinitions: [filterdefinitions],
      };
      DashboardAction._ApplicableFilterToDashboard(data, this.props.params.dashboardId);
      DashboardAction._ApplicableFilterToChart(data, this.props.params.dashboardId, chartId);
      DashboardAction._saveFilterToDashboard(data, this.props.params.dashboardId);


}

我能够在setstate中获取我想要的值。但价值观没有得到确定。显示值仅存在于this.state中。

提前致谢

2 个答案:

答案 0 :(得分:1)

用此

替换您的设置状态代码
   this.setState({ 
        filterData: this.state.filterData.map((data, index) => {
        data.filter = "equals",
        data.value = value,
        data.attribute=xname
}) });

答案 1 :(得分:1)

setState是 async ,因此无法保证在使用状态之后将设置状态,直到触发重新渲染。你设置它之后你应该非常小心地使用状态,更“反应”的方法通常更好。但是,如果要确保您能够访问新状态,可以使用setState 的第二个参数,这是一个在设置状态时将调用的回调函数。

你可以这样使用它:

_handleClickFilter(value, xname, chartId){
    this.setState({
          filterData: [{
          filter: "equals",  
          value:value ,
          attribute:xname, 
        }]
    }, () => {

    let filterdefinitions = {
        dataSourceId : "59ef50d6e4b054efd6d8aa53",
        filterDefinitions: this.state.filterData,
      }

      let data = {
        filterDefinitions: [filterdefinitions],
      };
      DashboardAction._ApplicableFilterToDashboard(data, this.props.params.dashboardId);
      DashboardAction._ApplicableFilterToChart(data, this.props.params.dashboardId, chartId);
      DashboardAction._saveFilterToDashboard(data, this.props.params.dashboardId);

    });
}