社区首页 >问答首页 >Redux TypeError:无法读取未定义的属性“setStatus”

Redux TypeError:无法读取未定义的属性“setStatus”
EN

Stack Overflow用户
提问于 2018-08-28 20:58:59
回答 2查看 448关注 0票数 1

我是新的反应和Redux,我试图改变一个下拉字段值onChange,但当我选择我要得到的值。看起来我正在跟踪Redux https://redux.js.org/basics的Basics,尽管我研究了几天以找到更好的解决方案和如何重写Action,但是查看文档几乎是相同的代码。

TypeError:无法读取未定义的属性“setStatus”

我的index.js

代码语言:javascript
代码运行次数:0
复制
// @flow
import React from 'react';
import Select from 'react-select'
import {connect} from 'react-redux'

import {
  setStatus,
} from '../../actions'

type Props = {
  status: { value: ?string, label: ?string },
  setStatus: Function,
}

type State = {}

// Select Invoice Type
const statusOptions = [
  {value: 'paid', label: 'Paid'},
  {value: 'due', label: 'Due'},
  {value: 'overdue', label: 'Overdue'},
  {value: 'onhold', label: 'On Hold'}
];

class Dashboard extends React.Component<Props, State> {
  state: State;

  constructor(props: Props) {
    super(props);
    this.state = {}
  }

  handleChangeStatus(value: { value: ?string, label: ?string }) {
    console.log(value)
    if (value)
      this.props.setStatus(value);
    else
      this.props.setStatus({value: 'paid', label: 'Paid'});
  };

  render() {
    return (
      <div>
        {/* Select Invoice Status */}
        <Select
          name="status"
          value={this.props.status}
          options={statusOptions}
          searchable={false}
          onChange={this.handleChangeStatus}
        />
      </div>
    )
  }
}

function mapStateToProps(state, ownProps) {
  return {
    status: state.status,
  }
}

function mapDispatchToProps(dispatch) {
  return {
    setStatus: (statusObj) => dispatch(setStatus(statusObj)),
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(Dashboard);

My `/action/index.js/

代码语言:javascript
代码运行次数:0
复制
// @flow

import {
  SET_INVOICE_STATUS,
} from '../constants';

export type Action = {
  status?: Object,
}

export function setStatus(status: Object): Action {
  return {
    type: SET_INVOICE_STATUS,
    status
  }
}

我的/constant/index.js

代码语言:javascript
代码运行次数:0
复制
// @flow

// Dashboard Implementation
export const SET_INVOICE_STATUS: string = "SET_INVOICE_STATUS";

最后我的reducer/index.js

代码语言:javascript
代码运行次数:0
复制
// @flow

import {SET_INVOICE_STATUS} from "../constants";
import type {Action} from "../actions";

type State = Object;

export default function statusReducer(state: State = {value: 'paid', label: 'Paid'}, action: Action) {
  if (action.type === SET_INVOICE_STATUS) {
    return action.status;
  }

  return state;
}

更新SEP 2,2018年

因此,在学习了一个星期后,我可以在我的项目中使用的babel和插件,我找到了一个解决方案,安装一个插件到babel,帮助创建一个错误函数,如handleChange = (event) => {},它的babel-plugin-transform-class-properties,位于这里的https://babeljs.io/docs/en/babel-plugin-transform-class-properties/。感谢Bhojendra Rauniyar的绑定帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-08-28 21:12:55

当你这样做时:

代码语言:javascript
代码运行次数:0
复制
this.props.setStatus(value);

this是未定义的。因为,您的方法不受约束。因此,您需要绑定this。有不同的方法,您可以尝试在构造函数中绑定this

代码语言:javascript
代码运行次数:0
复制
this.handleChangeStatus = this.handleChangeStatus.bind(this)
票数 4
EN

Stack Overflow用户

发布于 2018-08-29 05:50:31

就像@Bhojendra所说的那样,您可以这样做,这是两种方法之一(都需要绑定handleChangeStatus函数。首先是使用箭头函数:

代码语言:javascript
代码运行次数:0
复制
 handleChangeStatus = (value: { value: ?string, label: ?string }) => { //binds with arrow func
    console.log(value)
    if (value)
      this.props.setStatus(value);
    else
      this.props.setStatus({value: 'paid', label: 'Paid'});
  };

或者第二,在构造函数处绑定:

代码语言:javascript
代码运行次数:0
复制
    constructor(props: Props) {
        super(props);
        this.state = {}
        this.handleChangeStatus = this.handleChangeStatus.bind(this) // binding this to your function
      }

你不需要两者兼得,只有一个。箭头函数是最简单的,但两者都能工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52069756

复制
相关文章
python3 TypeError: a
运行telnetlib的时候报错:TypeError: a bytes-like object is required, not ‘str’,原因是因为python2和python3的版本的差异。 在python2中可正常运行,而python3最重要的新特性也是对文本和二进制数据做了更清晰的区分。文本用unicode编码,为str类型,二进制数据则为bytes类型。
py3study
2020/01/03
1.1K0
Mac 安装Python3
Python 2.7.10 (default, Jul 15 2017, 17:16:57) 
星宇大前端
2019/01/15
2K0
Pygraphviz
代码越来越复杂,为了理清架构,需要搞清楚现有代码业务逻辑,没有很顺手的工具,简单写写学习一下。
vanguard
2020/12/30
5750
python3 调用heapq库 时遭遇 "TypeError: unorderable types"
同样的代码在LeetCode上提交,在 python3解释器 下报错,换成 python2解释器 下却好好的:
JNingWei
2018/09/27
7550
python3 调用heapq库 时遭遇 "TypeError: unorderable types"
mac python3 安装parami
$ git clone https://github.com/paramiko/paramiko.git
py3study
2020/01/03
4740
mac> python3 安装Djang
说明:mac系统自带了python2.x (在/System/Library/Frameworks/Python.Frameworks/Version/2.x/...)
py3study
2020/01/03
4990
安装python3(mac、使用brew
其中在最后一行/usr/local/Cellar/python/3.6.5这个便是使用brew安装python3的目录
py3study
2020/01/13
3.1K0
mac系统安装pycharm_mac下载python3
pycharm 是一款针对python开发的优秀的IDE, 以下是针对其在mac上的开发配置使用
全栈程序员站长
2022/09/28
5200
PyGraphviz 安装使用
PyGraphviz 对于图、点和边的设置,如颜色、样式、形状等属性,分别提供有 graph_attr、node_attr 和 edge_attr 属性设置函数。
zhipingChen
2018/09/13
2.2K0
PyGraphviz 安装使用
基础服务系列-Mac 安装Python3
前言 本例采用brew安装。未安装brew,参考Mac 安装Brew。 安装步骤 search brew search python3 ==> Formulae boost-python3 python3 ✔ python@3 ✔ python@3.8 If you meant "python3" specifically: It was migra
用户2146693
2021/12/28
3200
基础服务系列-Mac 安装Python3
mac安装虚拟环境python3
Virtaulenvwrapper是virtualenv的扩展包,可以更方便地新增,删除,复制,切换虚拟环境。
新人小试
2020/03/31
5980
python3搞系统里头之Mac篇
mac系统自带python2环境, 但现在一般使用的都是python3, 而且python2在2020.1.1以后不会再进行维护了, 所以安装个python3还是很有必要的
不止于python
2022/05/31
3140
python3搞系统里头之Mac篇
Mac下Python3安装及基于Idea开发
本篇文章带大家基于Mac OS操作系统,下载、安装Python环境,并基于Idea编写第一个Demo。
程序新视界
2023/04/09
1.1K0
Mac下Python3安装及基于Idea开发
MAC os :LightGBM Installation Error in MacOS with Anaconda Python3
macos 报错 OSError: dlopen(/Users/yanerrol/opt/anaconda3/envs/py366/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so, 6): Library not loaded: /usr/local/opt/libomp/lib/libomp.dylib Referenced from: /Users/yanerrol/opt/anaconda3/envs/py366/lib/python3.6
AI拉呱
2021/03/04
1.5K0
linux下运行python3出现TypeError: a bytes-like object is required, not 'str'
 以上代码用python3运行后,出现TypeError: a bytes-like object is required, not 'str'
逆向小白
2018/09/12
13.8K0
linux下运行python3出现TypeError: a bytes-like object is required, not 'str'
mac os+selenium2+chrome驱动+python3
mac os 10.11.5 mac自带python2.7,自己下载了python3.5,pip list查看系统中的安装包,本人电脑中已经安装了pip和setuptools,若未安装,请先使用
全栈程序员站长
2022/09/07
4710
Mac上最简单配置python3开发环
网上有使用pyenv方式安装python3以实现与系统的python版本共存而不冲突,个人觉得其实没有必要,我们其实可以单独运行python3。 首先我们还是需要先安装python3,这里使用homebrew安装,方便快捷好管理,棒棒哒!
py3study
2020/01/05
1.3K0
Mac下安装Python3、pip、ipython的方法
1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 Xcode command line tool 1.2.1 打开命令行terminal工具 control + space 输入terminal 回车 1.2.2 安装Xcode command line tool xcode-select --install 2 安装套件管理工具 Homebrew 2.1 安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw
Python疯子
2018/09/06
1.7K0
python3在pycharm中为什么导入random模块不能用? TypeError: ‘module’ object is not callable…
新手学python求大神指导,也用sys导入了random.py的路径,仍然不行。
全栈程序员站长
2022/07/07
1.5K0
Django Models UML
Generate a class diagram based on GraphViz(pygraphviz) and django django-extensions
vanguard
2020/12/09
8260

相似问题

Python3,可除以3,typeError

12

Python3: TypeError:“TypeError”对象不可订阅

11

安装PyGraphviz时出错(Mac、Anaconda)

40

PySide & Python3: TypeError on QAction

10

Python3 Runserver TypeError {newbie}

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档