React-native:listview的liststate但对象仍然返回undefined

时间:2018-04-15 11:09:33

标签: javascript react-native

从下面的代码我尝试使dataSource返回一个String,但它返回undefined

constructor(props) {
    super(props)
    this.state = {
        uuid : this.props.navigation.state.params.uuid,
        facilityData: [],
        dataSource : []
    };
}

componentDidMount() {
    facilityStore.getFacilityInfo(this.state.uuid)
        .then((res) => {
            this.setState({
                facilityData: res.data.data
            })
            {this.checkparticipants()}
        })
        .catch((error) =>{
            alert(error);
        })
};

checkparticipants(){
    var ds = new ListView.DataSource({rowHasChanged: (r1,r2) => r1!=r2});
    this.setState({
        dataSource : ds.cloneWithRows([
            {invitePlaceholder : "Participant"},
            {invitePlaceholder : "Participant"},
            {invitePlaceholder : "Participant"},
            {invitePlaceholder : "Participant"},
        ])
    })
    console.log(this.state.dataSource.invitePlaceholder)
}

我想根据listview的数量渲染textinput,但是有一个错误:

  

TypeError:undefined不是对象

<ListView
    dataSource = {this.state.dataSource}
    renderRow={(rowData)=>
        <TextInput style={styles.input}
            placeholder={rowData.invitePlaceholder}
        />
    }
/>

那么我应该怎么做才能使代码中的对象不被定义?

2 个答案:

答案 0 :(得分:0)

setState是一种异步方法。所以,为了让任何东西处于状态,我认为你需要在设置状态后执行checkParticipants。这是作为setState

的回调完成的
facilityStore.getFacilityInfo(this.state.uuid)
.then((res) => {
  this.setState({ facilityData: res.data.data }, this.checkparticipants)
})

答案 1 :(得分:0)

this.checkparticipants()
因为语法错误而未调用

。 您的componentDidMount生命周期应为:

componentDidMount() {
    facilityStore.getFacilityInfo(this.state.uuid)
        .then((res) => {
            this.setState({
                facilityData: res.data.data
            },
            this.checkparticipants());
        })
        .catch((error) =>{
            alert(error);
        });
}

setState是一种异步方法。完成状态设置后调用checkparticipants()