如何在react-redux中修复“ TypeError:this.props.messages.map不是函数”

胖乎乎的小兔子

我正在尝试通过mapDispatchToProps()将道具传递到我的组件。但是,我遇到了这个问题

TypeError: this.props.messages.map is not a function
DisplayMessages.render
C:/Users/User/Desktop/Project/first-react-redux/src/DisplayMessages.js:38
  35 |             <h2>Type in a new message</h2>
  36 |             <input value={input} onChange={this.handleChange} />
  37 |             <button onClick={this.submitMessage}>Submit</button>
> 38 |             <ul>{this.props.messages.map((message, index) => <li key={index}>{message}</li>)}</ul>
     | ^  39 |         </div >
  40 |     )
  41 | }

如果取消注释第38行,则可以显示我的页面。但是,单击按钮后,我收到以下错误消息:

TypeError: Object(...) is not a function
submitNewMessage
C:/Users/User/Desktop/Project/first-react-redux/src/DisplayMessagesContainer.js:18
  16 |     return {
  17 |         submitNewMessage: (newMessage) => {
> 18 |             dispatch(addMessage(newMessage))
  19 |         }
  20 |     }
  21 | };

我是React-redux的新手,我不确定出了什么问题。我目前正在研究的示例来自freecodecamp,我已经在代码编辑器中测试了这些代码并通过了挑战(除了这次我是在自己的计算机上进行操作并构造自己的文件树)。

这是我的组件的外观:

import React from 'react';

export default class DisplayMessages extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            input: '',
        }
    }

    handleChange = (event) => {
        this.setState({
            input: event.target.value
        })
    }

    submitMessage = () => {
        this.props.submitNewMessage(this.state.input)
        this.setState({
            input: '',
       })
    }


    render() {
        const { input} = this.state
        return (
            <div>
                <h2>Type in a new message</h2>
                <input value={input} onChange={this.handleChange} />
                <button onClick={this.submitMessage}>Submit</button>
                <ul>{this.props.messages.map((message, index) => <li key={index}>{message}</li>)}</ul>
            </div >
        )
    }
}

这是我的容器:

import DisplayMessages from './DisplayMessages';
import { connect } from 'react-redux';
import addMessage from './redux/actions'

mapStateToProps
const mapStateToProps = (state) => {
    return { messages: state }
};

const mapDispatchToProps = (dispatch) => {
    return {
        submitNewMessage: (message) => {
            dispatch(addMessage(message))
        }
    }
};

const DisplayMessagesContainer = connect(mapStateToProps, mapDispatchToProps)(DisplayMessages)

export default DisplayMessagesContainer

我的reducer.js:

import { combineReducers } from 'redux';
import types from './types';

const defaultState = [];
const messageReducer = (state = defaultState, action) => {
    switch (action.type) {
        case types.ADD:
            return [...state].concat(action.message)
            break;
        default:
            return state
    }
}

const rootReducer = combineReducers({
    message: messageReducer
});

export default rootReducer;

我为动作创建者创建的action.js:

import types from './types.js';

const addMessage = (message) => {
    return {
        type: types.ADD,
        message: message
    }
}

export default {
    addMessage,
}

而我的type.js:

const ADD = "ADD"

export default {
    ADD,
}

那么我的代码到底出了什么问题?

关于此的任何帮助都非常感谢。

谢谢


编辑:我已经确认this.props.messages是一个对象而不是数组。但是我还有一个问题:为什么我可以在freecodecamp的代码编辑器中映射一个对象,但现在还不能呢?以及如何解决此问题?

ivica.moke

在减速器中,您已定义

const rootReducer = combineReducers({
    message: messageReducer
});

您应该像这样设置mapStateToProps吗?

//mapStateToProps
const mapStateToProps = (state) => {
    return { messages: state.message }
};

因为您不想将整个状态设置为message道具(并且state是object),所以您希望将message设置为state.message(message => reducer的名称)。

编辑老实说,我从未使用过mapDispatchToProps,我只是导入动作并将它们像第二个参数一样传递给connect(...),这actions是您的默认导出,它包含function addMessage,那个函数,所有其他内容都将放在props中当你这样通过他们时 如果您命名出口

//named export example 
export const addMessage()...
//import would be like
import {addMessage} from './redux/actions'
//passing to connect would be like 
export default connect(mapStateToProps, {addMessage});

和用法将与下面的示例相同。

例如

import actions from './redux/actions'

// inside DisplayMessages  i use action like
 submitMessage = () => {
        this.props.addMessage(this.state.input)
        this.setState({
            input: '',
       })
    }

export default connect(mapStateToProps, actions)(DisplayMessages)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React教程和Sinatra API:未捕获的TypeError:this.props.data.map不是函数

来自分类Dev

React:TypeError:this.props.users.map不是一个函数

来自分类Dev

如何修复TypeError _interopRequireDefault不是Create React App中的函数

来自分类Dev

如何修复TypeError _interopRequireDefault不是Create React App中的函数

来自分类Dev

反应Redux TypeError this.props.setEmailText不是函数

来自分类Dev

TypeError:records.map不是React中的函数

来自分类Dev

React Redux-props.createMovie不是函数

来自分类Dev

反应代码抛出“ TypeError:this.props.data.map不是函数”

来自分类Dev

获取错误 - TypeError:this.props.registerMessage.map 不是函数

来自分类Dev

如何在React中动态填充选择选项的setState?TypeError:this.state.schoolName.map不是函数

来自分类Dev

我如何在 react + this.props.onContactSubmit 中调用编辑函数不是函数

来自分类Dev

Angular 如何修复 TypeError:getUnfinishedItemsNumber 不是函数?

来自分类Dev

React Redux - 获取组件状态 - 未捕获的 TypeError:users.map 不是函数

来自分类Dev

反应-TypeError:this.props.AccountId不是函数

来自分类Dev

TypeError:this.props.logout不是函数

来自分类Dev

TypeError:this.props.postRecipes不是函数

来自分类Dev

当子组件尝试调用传递的函数时,在 React 中出现 typeError 说 this.props 不是函数

来自分类Dev

我在TypeError中获取错误:records.map不是我的React应用程序中的函数

来自分类Dev

我在TypeError中获取错误:records.map不是我的React应用程序中的函数

来自分类Dev

_this2.props.signup 不是 React Redux 应用程序中的函数

来自分类Dev

未捕获的TypeError:_this.props.data.map不是一个函数,映射错误以渲染组件

来自分类Dev

“ TypeError:props.todos.map不是函数”无法确定原因是什么?

来自分类Dev

如何修复 this.state.*.map 不是函数?

来自分类Dev

this.props.dispatch 不是 react js 组件文件中的函数

来自分类Dev

React JS-TypeError:this.state.data.map不是函数

来自分类Dev

如何修复 React.js 中的箭头函数以使用 props

来自分类Dev

如何修复WordPress自定义页面中的“ TypeError:$不是函数”错误?

来自分类Dev

如何修复“未捕获的TypeError:调度不是函数”?

来自分类Dev

如何从 typeorm 修复“TypeError:relatedEntities.forEach 不是函数”

Related 相关文章

  1. 1

    React教程和Sinatra API:未捕获的TypeError:this.props.data.map不是函数

  2. 2

    React:TypeError:this.props.users.map不是一个函数

  3. 3

    如何修复TypeError _interopRequireDefault不是Create React App中的函数

  4. 4

    如何修复TypeError _interopRequireDefault不是Create React App中的函数

  5. 5

    反应Redux TypeError this.props.setEmailText不是函数

  6. 6

    TypeError:records.map不是React中的函数

  7. 7

    React Redux-props.createMovie不是函数

  8. 8

    反应代码抛出“ TypeError:this.props.data.map不是函数”

  9. 9

    获取错误 - TypeError:this.props.registerMessage.map 不是函数

  10. 10

    如何在React中动态填充选择选项的setState?TypeError:this.state.schoolName.map不是函数

  11. 11

    我如何在 react + this.props.onContactSubmit 中调用编辑函数不是函数

  12. 12

    Angular 如何修复 TypeError:getUnfinishedItemsNumber 不是函数?

  13. 13

    React Redux - 获取组件状态 - 未捕获的 TypeError:users.map 不是函数

  14. 14

    反应-TypeError:this.props.AccountId不是函数

  15. 15

    TypeError:this.props.logout不是函数

  16. 16

    TypeError:this.props.postRecipes不是函数

  17. 17

    当子组件尝试调用传递的函数时,在 React 中出现 typeError 说 this.props 不是函数

  18. 18

    我在TypeError中获取错误:records.map不是我的React应用程序中的函数

  19. 19

    我在TypeError中获取错误:records.map不是我的React应用程序中的函数

  20. 20

    _this2.props.signup 不是 React Redux 应用程序中的函数

  21. 21

    未捕获的TypeError:_this.props.data.map不是一个函数,映射错误以渲染组件

  22. 22

    “ TypeError:props.todos.map不是函数”无法确定原因是什么?

  23. 23

    如何修复 this.state.*.map 不是函数?

  24. 24

    this.props.dispatch 不是 react js 组件文件中的函数

  25. 25

    React JS-TypeError:this.state.data.map不是函数

  26. 26

    如何修复 React.js 中的箭头函数以使用 props

  27. 27

    如何修复WordPress自定义页面中的“ TypeError:$不是函数”错误?

  28. 28

    如何修复“未捕获的TypeError:调度不是函数”?

  29. 29

    如何从 typeorm 修复“TypeError:relatedEntities.forEach 不是函数”

热门标签

归档