React Native - 状态改变但组件没有重新渲染

Posted

技术标签:

【中文标题】React Native - 状态改变但组件没有重新渲染【英文标题】:React Native - State Changing but Component is not re-rendering 【发布时间】:2019-09-23 17:34:07 【问题描述】:

我正在制作一个用于更改 Google Maps API 类型的菜单,但按下的状态没有按我的预期工作。请注意,在函数setPressedState 上更改this.state.pressed 后,Text 组件内的状态不会被重新渲染,并且在使用getPressed 后,它不会在包含MapMenu 组件的组件上重新渲染。

注意:警报显示按下的状态正在改变。

class MapMenu extends Component
    constructor(props)
        super(props);

        this.state = 
            pressed: 'standard'
        
    

    setPressedState(press)
        this.state.pressed = press;
        Alert.alert(this.state.pressed)
    

    getPressed()
        return(this.state.pressed);
    

    render()
        return(
            <View style=styles.container>
            <View style=backgroundColor: 'red'><Text>this.state.pressed</Text></View>

                <TouchableOpacity   style=styles.button
                                    onPress=() => this.setPressedState('standart')
                >
                    <Text>Mapa</Text>
                </TouchableOpacity>
                <TouchableOpacity   style=styles.button
                                    onPress=() => this.setPressedState('hybrid')
                >
                    <Text>Hibrido</Text>
                </TouchableOpacity>
                <TouchableOpacity   style=styles.button
                                    onPress=() => this.setPressedState('satellite')
                >
                    <Text>Satellite</Text>
                </TouchableOpacity>
            </View>
        );
    

【问题讨论】:

使用this.setState(key,value)重新渲染组件 【参考方案1】:

要重新渲染组件,您需要使用setState 方法,正如official documentation 中提到的那样:

一般来说,你应该在构造函数中初始化状态,然后当你想改变它时调用setState。

看到这个,

setPressedState = (press) => 
    this.setState(pressed:press, () => 
      Alert.alert(this.state.pressed)
    );

【讨论】:

这是正确的方法。添加到答案是文档reactjs.org/docs/state-and-lifecycle.html的链接【参考方案2】:

这不是你正在做的正确方式,你不应该把状态当作你使用的任何其他变量并使用赋值运算符,

在对变量和常量做出反应时,您可以使用赋值运算符, 但如果是你应该使用的状态。

setState(
stateVariable:NewValue 
)

【讨论】:

以上是关于React Native - 状态改变但组件没有重新渲染的主要内容,如果未能解决你的问题,请参考以下文章

React Native的state使用详解

react native 中的redux

React Native中状态栏设置StatusBar

从 React Native 中的 api 拦截器(组件外部)重定向到屏幕

React-Native从入门到深入--组件生命周期

React Native入门组件的Props(属性)和State(状态)