在获取数据后设置状态的问题

时间:2018-05-29 22:09:59

标签: javascript reactjs react-native

我正在创建一个表单,我想在初始加载时加载数据。

我已经设置了Mount来调用我的函数fetchClaims。我收到了结果,我可以控制登录它。我不能做的是用它更新我的状态,以便我可以在我的表单中使用它。

componentDidMount() {
  this.onInit(this.props);
}

onInit = props =>
  props
    .fetchClaims()
    .then(results => console.log('results = ' + JSON.stringify(results)))
    .then(claims => this.setState({ results }))
    .then(results =>
      console.log('results state = ' + JSON.stringify(this.state)),
    );

结果数据类似于

results = {
  type: 'CLAIMS_FETCHED',
  claims: [
    {
      _id: '5b0d5b7f035a00f06003e6b8',
      claimID: '123456',
      claimDate: '2018-05-14T00:00:00.000Z',
      carrier: 'BCBS NJ',
    },
  ],
};

并且州看起来像

state = {
  data: { email: '' },
  loading: false,
  errors: {},
  fromdate: '',
  todate: '',
  claims: {},
  results: {},
};

我想将声明数组填充到状态中的声明中,然后映射它。

3 个答案:

答案 0 :(得分:1)

尝试在第一个控制台日志之后返回值,并在设置状态时修复参数名称。

onInit = props => props.fetchClaims()
    .then(results => {
        console.log("results = " + JSON.stringify(results));
        return results;
    })
    .then(results => this.setState({ claims: results.claims }))
    .then(() => console.log("results state = " + JSON.stringify(this.state)));

答案 1 :(得分:0)

我重写了你的代码,试试这个:

onInit = props => props.fetchClaims()
 .then(results =>  {
  console.log("results = " + JSON.stringify(results))
  this.setState( { results }, () => console.log("results state = " + JSON.stringify(this.state) ))
 })

答案 2 :(得分:0)

试试这个你可能会得到

onInit = props => props.fetchClaims()
           .then(
             res =>res.json() )
           .then(results => this.setState({results }, () 
 => console.log('results ', results )))