在 redux 中未使用 reactjs 定义调度

Posted

技术标签:

【中文标题】在 redux 中未使用 reactjs 定义调度【英文标题】:Dispatch is not defined in redux with reactjs 【发布时间】:2016-11-18 03:51:26 【问题描述】:

我想知道为什么单击表格行仍然会给我未定义的调度错误,导致Uncaught TypeError: dispatch is not a function。我一直在关注这个post 来尝试解决问题,但到目前为止还没有成功。

ListingTable.js

import Table from 'grommet/components/Table';
import React from 'react';
import remove, add from '../action/ListAction';
import connect from 'react-redux'

let createHandlers = function(dispatch) 
    let onClick = function(item) 
        dispatch(add(item)) <<== undefined!!!!
    ;
    return 
        onClick
    ;
;
export class ListingTable extends React.Component 

    constructor(props) 
        super(props);
        this.handlers = createHandlers(this.props.dispatch);
    
    render() 
        return <Table>
                <tbody>
                
                    this.props.data.map((item, key)=>
                        (
                            // Undefined Error!!!!
                            <tr onClick=()=> this.handlers.onClick(item) key=key>

                                <td>item.user_name</td>
                                <td>item.name</td>
                                <td>item.url</td>
                            </tr>
                        ))
                
                </tbody>
            </Table>
    


export default connect()(ListingTable)

app.js

import  ListingTable  from './component/ListingTable';
import  Provider  from 'react-redux'
import createStore from 'redux';
import reducer from '../reducer/ListingReducer'

export default class Page extends React.Component 
   render() 
      <Provider store=createStore(reducer)>
         <ListingTable data=this.props.item/>
      </Provider>
   

我在调试控制台中看到了 store 对象,但它没有传递给 ListingTable 组件:

【问题讨论】:

import ListingTable from './' 在默认导出时导入值,而 import ListingTable from './' 按名称导入值 【参考方案1】:

您正在导入未连接的组件。

class ListingTable之前删除export

class ListingTable extends React.Component 

  constructor(props) 
    super(props);
    this.handlers = createHandlers(this.props.dispatch);
  
  render() 
    return <Table>
            <tbody>
            
                this.props.data.map((item, key)=>
                    (
                        // Undefined Error!!!!
                        <tr onClick=()=> this.handlers.onClick(item) key=key>

                            <td>item.user_name</td>
                            <td>item.name</td>
                            <td>item.url</td>
                        </tr>
                    ))
            
            </tbody>
        </Table>
  


export default connect()(ListingTable)

app.js

import ListingTable from './component/ListingTable';

【讨论】:

使用 typescript / ES6,我还必须将我的导入从 import ListingTable from '..' 更改为 import ListingTable from '..'。非常微妙,我想现在我知道export default 是如何工作的了。

以上是关于在 redux 中未使用 reactjs 定义调度的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS + Redux + Reduc-thunk 无法调度承诺

在 redux 连接的反应应用程序中未定义初始状态

reducer.state.props 在嵌套动作 react/redux 中未定义

Redux/Flux(使用 ReactJS)和动画

“this”在地图函数Reactjs中未定义

为啥声明类型时可以在 redux 中未定义状态?