reactjs - FlatList 调用两次

标签 reactjs react-native

我有这个代码

class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
        dataSource: []
    }
    this._handleRenderItem = this._handleRenderItem.bind(this);
    this._keyExtractor = this._keyExtractor.bind(this);
  }

  componentDidMount() {

    let success = (response) => {
        this.setState({ dataSource: response.data });
    };

    let error = (err) => {
        console.log(err.response);
    };

    listarProdutos(success, error);
  }

  _keyExtractor = (item, index) => item._id;

  _handleRenderItem = (produto) => {
    return (
        <ItemAtualizado item={produto.item} />
    );
  }

  render() {
    return (
        <Container style={styles.container}>
            <Content>
                <Card>
                    <CardItem style={{ flexDirection: 'column' }}>
                        <Text style={{ color: '#323232' }}>Produtos atualizados recentemente</Text>
                        <View style={{ width: '100%' }}>
                            <FlatList
                                showsVerticalScrollIndicator={false}
                                data={this.state.dataSource}
                                keyExtractor={this._keyExtractor}
                                renderItem={this._handleRenderItem}
                            />
                        </View>
                    </CardItem>
                </Card>
            </Content>
        </Container>
    );
  }
}

export default Home;

函数_handleRenderItem()被叫了两次,但我找不到原因。第一次我里面的值 <ItemAtualizado />都是空的,但第二个是一个对象。

enter image description here

最佳答案

这是正常的 RN 行为。首先,当创建组件时,您有一个空的 DataSource ([]),因此 FlatList 会用它来呈现。

之后,componentDidMount触发并加载更新的数据,从而更新DataSource。

然后,您使用 setState 更新状态,这会触发重新渲染以更新 FlatList。

这里一切正常。如果您想尝试,请在构造函数中加载数据源,并在 componentDidMount 中删除加载。它应该只触发一次。

关于reactjs - FlatList 调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357524/

相关文章:

reactjs - Typescript:如何声明一个包含扩展公共(public)类型的所有类型的类型?

javascript - state中如何使用setState拼接成数组?

reactjs - Github 不让我将个人网站的源更改为 gh-pages 分支?

android - 我可以使用 react native 构建 Android 应用程序吗?

javascript - react native 导航实验和 MapView 手势

javascript - React-Native 中的 Alt @decorators

javascript - 将变量设置为等于函数的返回值

node.js - React Native + Firebase + Expo 版本三角问题

javascript - 如何在 react-native 功能组件中应用 PropType?

react-native - 如何启动和打开电子邮件客户端 React-native?