Mari kita bercakap tentang latar belakang dahulu: Terdapat senarai rata yang besar pada halaman, dengan 3 item di dalamnya. Saya mempunyai senarai rata di bahagian bawah item ketiga, yang juga merupakan bahagian bawah senarai rata luar ini keadaan. Data memerlukan fungsi pemuatan tarik naik, kerana senarai rata dalaman tidak boleh mendapatkan acara tarik turun, jadi saya menulis kaedah pemuatan tarik naik di lapisan paling luar, dapatkan data dan masukkannya ke dalam keadaan, dengan itu menukar data di dalam. Walau bagaimanapun, walaupun keadaan telah berubah, halaman itu tidak dimuat semula.
Cetak di latar belakang untuk mengesahkan bahawa keadaan telah berubah
Kod ringkas terakhir
constructor(props) {
super(props)
this.state = {
data: [{"key": 1}, {"key": 2}, {"key": 3}],
}
this._changeData = this._changeData.bind(this);
}
_changeData(){
this.setState({
data :[{"key": 1}, {"key": 2}, {"key": 3},{"key": 4},{"key": 5}],
})
}
_renderItem = ({item}) => {
switch (item.key) {
case 1:
return (
<View>
<Text style={{height: 200}}>1111</Text>
</View>
);
case 2:
return (
<View>
<Text style={{height: 200}}>ke2222y2</Text>
</View>
);
case 3:
return (
//这个flatlist需要做上拉加载
<FlatList
data={this.state.data}
renderItem={({item}) => <View style={{height: 200}}><Text>{item.key}</Text></View>}
/>
)
}
}
render() {
const {navigate} = this.props.navigation;
let user = {'name': 'zy', age: 18}
return (
<View>
<Text onPress={() => navigate('Two', {user: user})}>Home</Text>
<FlatList
data={[{"key": 1}, {"key": 2}, {"key": 3}]}
renderItem={this._renderItem}
onEndReached={this._changeData}
onEndReachedThreshold={0.3}
/>
<Text onPress={() => navigate('Two', {user: user})}>Home</Text>
</View>
)
}
Demo yang saya tulis boleh dicapai
Tetapi pada siang hari dalam projek, data adalah tatasusunan yang diperoleh daripada rangkaian
Saya menggunakan tatasusunan baharu a untuk meletakkan tatasusunan dalam keadaan, dan kemudian tambah tatasusunan yang diperolehi , dan akhirnya tetapkan tatasusunan ini a untuk menyatakan
Tetapi saya mendapati tiada perubahan dan halaman itu tidak dimuat semula
By the way, adakah cara yang lebih baik
Anda hanya boleh mencetuskan pemaparan melalui setState.
Tidak boleh dicetuskan oleh tugasan langsung
Walaupun saya tidak tahu bagaimana anda sebenarnya melaksanakannya, saya rasa anda menggunakan kaedah yang kedua.