为了账号安全,请及时绑定邮箱和手机立即绑定

React Native for Web:当状态更新时,我的组件不会重新渲染

React Native for Web:当状态更新时,我的组件不会重新渲染

慕桂英4014372 2021-11-04 10:39:06
我是 React 的新手,过去 2 天我一直在研究 React。我正在尝试从 API 获取数据。但是当数据更新时,状态不会更新,组件也不会重新渲染。但是页面的刷新完成了这项工作。这是我的组件代码:import { View, FlatList, Text, TouchableOpacity } from 'react-native'class Products extends Component {    constructor(props){        super(props);        this.state={            dataSource: []        }    }    componentDidMount(){        fetch("http://localhost:8000/index.php")        .then(response => response.json())        .then((responseJson) => {            this.setState({                dataSource: responseJson            })        })        .catch(error => console.log(error))    }    renderItem = (data) =>        <TouchableOpacity>            <Text>{data.item.product_name}</Text>            <Text>{data.item.product_description}</Text>            <Text>{data.item.product_model}</Text></TouchableOpacity>        return (            <View>                <FlatList                    data={this.state.dataSource}                    renderItem={item => this.renderItem(item)}                    keyExtractor={item => item.id}                />            </View>        )}export default Products
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

当您使用类组件时,您需要创建一个渲染方法,返回仅在函数组件中有效,请尝试


import { View, FlatList, Text, TouchableOpacity } from 'react-native'


class Products extends Component {

    constructor(props){

        super(props);

        this.state={

            dataSource: []

        }

    }


    componentDidMount(){

        fetch("http://localhost:8000/index.php")

        .then(response => response.json())

        .then((responseJson) => {

            this.setState({

                dataSource: responseJson

            })

        })

        .catch(error => console.log(error))

    }




    renderItem = (data) =>

        <TouchableOpacity>

            <Text>{data.item.product_name}</Text>

            <Text>{data.item.product_description}</Text>

            <Text>{data.item.product_model}</Text></TouchableOpacity>


    render() {

            return (<View>

                <FlatList

                    data={this.state.dataSource}

                    renderItem={item => this.renderItem(item)}

                    keyExtractor={item => item.id}

                />

            </View>);

    }

}


export default Products


查看完整回答
反对 回复 2021-11-04
?
交互式爱情

TA贡献1712条经验 获得超3个赞

尝试将 extraData 道具添加到 FlatListextraData={this.state.dataSource}它的作用是在 extraData 中的指定数据发生更改时重新呈现 FlatList 。


查看完整回答
反对 回复 2021-11-04
?
三国纷争

TA贡献1804条经验 获得超7个赞

当您使用基于类的组件时,您必须return(...)使用render()函数包装。


    render() {

        return (

            <View>

                <FlatList

                    data={this.state.dataSource}

                    renderItem={item => this.renderItem(item)}

                    keyExtractor={item => item.id}

                />

            </View>

        );

    }


查看完整回答
反对 回复 2021-11-04
  • 3 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信