javascript - 为什么 mapStateToProps 只以这种奇怪的方式更新? (对此可以做些什么?)

标签 javascript reactjs redux react-native

将 redux 与 react-native 结合使用发现 mapStateToProps 仅在另一个正在运行的手机应用程序窗口首先切换到时才会更新。

例如下面的测试代码预期的步骤:

  1. 显示默认开始测试文本。
  2. 发送文本操作按钮

产生:

  1. 显示更新的更改 文本而不是开始

取而代之的是:

  1. 需要切换到另一个正在运行的应用程序窗口(例如:时钟应用程序),然后切换回开发应用程序。
  2. 显示更新的更改 文本而不是开始

除非我们先在应用程序窗口之间来回切换,否则 mapStateToProps 函数不会更新组件。

有什么想法吗?


测试代码

reducer

import { combineReducers } from 'redux';


const test = (state = 'Start', action) => {
    switch(action.type){
        case 'ADD':
            return('Changed')
        default:
            return state
    }
}

export default combineReducers({
    test
})

测试 Action +容器

import { connect } from 'react-redux'
import TestComp from '../components/TestComp'


const mapStateToProps = (state) => ({
    test: state.test
})

const mapDispatchToProps = (dispatch) => ({
     testDispatch: () => dispatch({type: 'ADD'})
})

export default connect(
   mapStateToProps,
   mapDispatchToProps
)(TestComp)

组件

import React, { Component } from 'react'


class TestComp extends Component{
    constructor(props){
        super(props)

        this.test = props.test
        this.testDispatch = props.testDispatch
    }

    render(){
        return(
            <View>
                <Text>
                     {this.test}
                </Text>

                <Button
                   title='Dispatch Test Action'
                   onPress={() => this.testDispatch()}
                />
            </View>

        )
    }
}


export default TestComp

最佳答案

问题是您在构造函数中捕获了 props.test 的值。 This.test 永远不会在对象的生命周期内再次更新,这就是您看不到更新的原因。

相反,您应该删除 TestComp 组件中的 this.test 并改用 this.props.test

关于javascript - 为什么 mapStateToProps 只以这种奇怪的方式更新? (对此可以做些什么?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51914688/

相关文章:

Javascript - 按条件使用链式函数的不同部分

javascript - 在 firebase 内部调用 'this' once 函数

javascript - 根据子链接元素更改列表元素的父类

javascript - 三元运算符多个语句

javascript - 如何在 RxJS 中通过 ID 去抖

javascript - 使用字符开始和结束位置的多个唯一字符串替换

javascript - 如何将 typescript 文件导入脚本标签

reactjs - NextJS 自定义 URL

导入 "not exported"类型时出现 typescript 错误,即使它已导出

reactjs - 如何使用 redux 中的 axios 库自动为发布到 API 服务器的数据生成唯一的 id