You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux中useSelector正常但connect的mapStateToProps返回number为undefined

问题根因

你调用connect时传入的mapStateToProps、mapDispatchToProps属于未定义状态。
你使用const声明这两个函数,而const不存在变量提升,两个函数的定义写在了export default connect(...)语句之后,代码执行到connect时,这两个参数还没有完成初始化,传入的是undefined,自然无法完成状态到组件props的映射,所以组件拿到的number是undefined。

解决方法

调整代码顺序,把mapStateToProps、mapDispatchToProps的定义放到export default语句之前即可,修改后的组件代码参考如下:

import React from 'react'
import { StyleSheet, Text, View } from 'react-native'
import { connect } from 'react-redux'
import { incrementNumber } from '../actions/exampleAction'

const Incrementor = ({ number, increment }) => {
  return (
    <View>
      <Text onPress={increment}>{number}</Text>
    </View>
  )
}

const styles = StyleSheet.create({})

// 两个映射函数的定义移到export语句前
const mapStateToProps = (state) => {
  return {
    number: state.exampleReducer.number,
  }
};

const mapDispatchToProps = (dispatch) => {
  return {
    increment: () => dispatch(incrementNumber()),
  }
};

export default connect(mapStateToProps, mapDispatchToProps)(Incrementor)

你也可以直接把映射逻辑写在connect参数里,不用单独声明变量,也能避免顺序问题:

export default connect(
  state => ({ number: state.exampleReducer.number }),
  dispatch => ({ increment: () => dispatch(incrementNumber()) })
)(Incrementor)

内容的提问来源于stack exchange,提问作者Jan1208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:15:04