gpt4 book ai didi

javascript - React-Native FlatList 不使用自定义 renderItem 重新渲染

转载 作者:行者123 更新时间:2023-11-29 20:57:51 32 4
gpt4 key购买 nike

我有一个 FlatList,当使用普通的旧 <Text> 时,它可以按预期工作。标记,但是在 renderItem 中使用自定义组件时,FlatList 在更改 this.state.dayOfYear 时不会重新呈现.在应用程序加载时,当我设置 this.state.dayOfYear , 它加载正确。但是当我再次改变状态时,它不会改变 FlatList。

FlatList代码

<FlatList
style={{flex: 1}}
extraData={this.state}
data={reading_data[this.state.dayOfYear]}
renderItem={({item}) => <DayRow content={item}/>} //does not work
// renderItem={({item}) => <Text>{item.ref}</Text>} //Works perfectly
keyExtractor={(item, index) => index}
/>

自定义 renderItem (DayView.js)

import {StyleSheet, Text, View} from 'react-native'
import React, {Component} from 'react';

export default class DayRow extends React.Component {

constructor(props) {
super(props)
console.log(props)
this.state = {
content: props.content,
}
}

render() {
return (
<View style={styles.row}>
<Text style={styles.text}>{this.state.content.ref}</Text>
<View style={{height: 2, backgroundColor:'#abb0ab'}}/>
</View>
);
}
}

const styles = StyleSheet.create({
row: {
backgroundColor: '#fff'
},
text: {
fontSize: 16,
padding: 10,
fontWeight: 'bold',
color: '#000',
},
});

module.exports = DayRow;

最佳答案

我很确定您的 DayRow 项是在设置 props.content 之前构建的,您需要在安装组件时获取 Prop 。尝试添加这个:

componentWillMount() {
const { content } = this.props;
this.setState({content: content});
}

编辑我错过了关于“重新渲染”的部分......基本上你需要一个代码块,当它的 Prop 改变时更新你的组件状态, react 组件有另一个类似于 componentWillMount 的函数称为 componentWillReceiveProps,试试:

componentWillReceiveProps(nextProps) {
const { content } = nextProps;
this.setState({content: content});
}

关于javascript - React-Native FlatList 不使用自定义 renderItem 重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48312089/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com