【问题标题】:Can't add data to array state in a right way无法以正确的方式将数据添加到数组状态
【发布时间】:2019-11-08 18:52:29
【问题描述】:

我正在尝试从此 API https://apigrad.herokuapp.com/people 获取数据 并将每一行的名称放入数组 name[] 中,然后我想访问名为“User”的组件内的每个名称,其变量名为 name。

这是用户组件的代码

class User extends React.Component {
  render() {
    const { name, avatar} = this.props;
    const userDetails = (
        <View style={styles.container}>
          <Image style={styles.img} source={{uri: avatar}}/>
          <Text>Name: {name} </Text>
        </View>
    );
    return (
      <Card>
      {userDetails}
      </Card>
    );
  }
}

这是主要代码

export default class SettingScreen extends React.Component {
  constructor(props){
    super(props);
    this.state={
      name: [],
      avatar:[]
    };
  }
  render() {
    var userCard=[];
    for(let i=0; i<3; i++){
      userCard.push(
        <View key={i}>
          <User name={this.state.name[i]}/>
        ))}
        </View>
      )
    }
    return (
      <View style={styles.container}>
      <MenuButton navigation={this.props.navigation}/>
        {userCard}
      </View>
    );
  }
  async componentDidMount() {
// Load async data.
  let userData = await API.get('/', {
      params: {
        results: 1,
        inc: 'name,avatar'
      }
    });

        // Parse the results for ease of use.
    for(let i=0; i<userData.length; i++){
      const Data = userData.data[i];
      const names = Data.name;
      const base64Icon=Data.image;
      const base64Icons=base64Icon.slice(2,-1);
      const avatar = 'data:image/jpg;base64,'+base64Icons;
      this.setState({
        name: [...this.state.name,names]
        }
      );
    } 
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },
  text: {
    fontSize: 30,
  }
});

预期用户拥有组件用户,API 中每一行的名称 但出现此错误 不变违规:不变违规:必须在组件内呈现文本字符串。

【问题讨论】:

    标签: reactjs react-native axios state react-native-android


    【解决方案1】:

    看来你for循环里面的括号太多了,改一下:

     for(let i=0; i<1; i++){
      userCard.push(
        <View key={i}>
          <User name={this.state.name[i]}/>
        ))}
        </View>
      )
    }
    

    到:

     for(let i=0; i<1; i++){
      userCard.push(
        <View key={i}>
          <User name={this.state.name[i]}/>
        </View>
      )
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2016-09-22
      相关资源
      最近更新 更多