javascript - React 内部的不变违规错误

标签 javascript reactjs react-native

我有这个组件功能

 async FetchCards() {
    axios.get(settings.default.baseUrl + '/api/cards/get_cards').then((data) => {
      var dd = data.data.data;
      //this.setState({cards : d});
      return(
        dd.map(d => {
          <Card style={{flex: 0}}>
          <CardItem>
            <Left>
              <Thumbnail source={{uri: d.img}} />
              <Body>
                <Text>{d.name}</Text>
                <Text note>{d.position}</Text>
              </Body>
            </Left>
            <Right>
                {d.gender == 'male' && <Icon style={{fontWeight : '900' , fontSize:32 , color : 'darkblue'}} name='ios-male'></Icon>}
                {d.gender == 'female' && <Icon style={{fontWeight : '900' , fontSize:32 , color : 'pink'}} name='ios-female'></Icon>}
            </Right>
          </CardItem>
          <CardItem>
            <Body>
              <Text>
                {d.subtitle}
              </Text>
            </Body>
          </CardItem>
        </Card>  
        })
      );
    }).catch((err) => {
      console.log(err);
    });
  }

当我在这里调用它的时候

{this.FetchCards()}

它引发了这个错误:

Invariant Violation : Objects are not valid as a react child (found object with keys{_40,_65,_55,_72}) , if you meant to render a collection of children , use an array instead.

最佳答案

看起来您是在渲染方法中直接在 JSX 中调用 this.FetchCards。您可以在 componentDidMount 中获取数据并将其设置为您的组件状态。

示例

class App extends React.Component {
  state = { cards: [] };

  componentDidMount() {
    axios.get(settings.default.baseUrl + "/api/cards/get_cards").then(data => {
      const cards = data.data.data;
      this.setState({ cards });
    });
  }

  render() {
    const { cards } = this.state;
    return (
      <View>
        {cards.map(c => (
          <Card style={{ flex: 0 }}>
            <CardItem>
              <Left>
                <Thumbnail source={{ uri: c.img }} />
                <Body>
                  <Text>{c.name}</Text>
                  <Text note>{c.position}</Text>
                </Body>
              </Left>
              <Right>
                {c.gender == "male" && (
                  <Icon
                    style={{
                      fontWeight: "900",
                      fontSize: 32,
                      color: "darkblue"
                    }}
                    name="ios-male"
                  />
                )}
                {c.gender == "female" && (
                  <Icon
                    style={{ fontWeight: "900", fontSize: 32, color: "pink" }}
                    name="ios-female"
                  />
                )}
              </Right>
            </CardItem>
            <CardItem>
              <Body>
                <Text>{c.subtitle}</Text>
              </Body>
            </CardItem>
          </Card>
        ))}
      </View>
    );
  }
}

关于javascript - React 内部的不变违规错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51104833/

相关文章:

javascript - 缩短 Javascript

javascript - TypeError : Main. 登录不是函数

javascript - svelte 如何处理导入内部的 react 性

javascript - react .js :You called `setState` with a callback that isn't callable

javascript - 无法将数据从 json 文件传递​​到 Chart.js 中的标签和数据集

javascript - 检查变量中的元素在当前 DOM 中是否有引用

javascript - 如何在 React Native 中设置 axios 的休息状态

javascript - 如何使用 Flux Store 更改对象值?

reactjs - 如何从其他组件更新状态?

javascript - React Native - 使用 AsyncStorage 将数据存储在另一个屏幕中