javascript - Mengapa halaman tidak dimuat semula apabila keadaan berubah dalam kes ini?
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-06-06 09:52:50
0
2
652

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

曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(2)
大家讲道理

By the way, adakah cara yang lebih baik

漂亮男人

Anda hanya boleh mencetuskan pemaparan melalui setState.

this.setState({
    data: anotherData
})

Tidak boleh dicetuskan oleh tugasan langsung

this.state.data = anotherData

Walaupun saya tidak tahu bagaimana anda sebenarnya melaksanakannya, saya rasa anda menggunakan kaedah yang kedua.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan