错误:TypeError:无法读取React-Redux中未定义的属性“ map”

时间:2020-03-15 14:27:18

标签: javascript reactjs redux react-redux redux-thunk

我正在使用 https://jsonplaceholder.typicode.com/users 中的axios进行一些简单的提取,并且我正在使用redux来存储应用程序的状态。从URL上传中,我想在下拉列表中获取所有名称。但是从2天起给我这个错误:

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

现在,如果您以前看过,我将在下面提供一些代码。

这是行动,我认为可以。

>>> a = 'ABC, DEF, GHIJ'
>>> a.split(',')
['ABC', ' DEF', ' GHIJ']
>>> a = a.split(',')
>>> c = '7.00, 8.00, 9.00'
>>> c = c.split(',')
>>> e = '7.20, 8.20, 9.20'
>>> e = e.split(',')


h = {}

class Profile:
    def __init__(self, *args):
        self.one = h['info1']
        self.two = h['info2']
        self.three = h['info3']


>>> e = []
>>> for i in range(len(a)): # Takes splitted info above, combines it, and adds it to a dictionary(Ex: h['info1'] = ABC, h['info2'] = 7.00, h['info'] = 7.20)
    h['info1'] = a[i]
    h['info2'] = c[i]
    h['info3'] = e[i]
    e.append(Profile(h['info1'], h['info2'], h['info3'])) # Adds each combined list index to its own individual class

这是减速器,我认为这是错误:

export const getAuthors = () => {
 return (dispatch) => {
axios.get('https://jsonplaceholder.typicode.com/users')
  .then((response) => {
    dispatch({
      type: GET_AUTHORS,
      payload: response.data
    })
  })
  .catch(e => console.log(e))
 }}

以下是显示错误的功能组件:

export default (state = initialState, action) => {
console.log("ACTION", action.payload);
switch (action.type) {
    case GET_AUTHORS:
        return {...state, authors: action.payload}
    default:
        return state;
}
}

以及下面的类组件:

const AddPostModal = ({authors, authorName}) => {
  return(
      <select
          value={authorName}
          onChange={handleChangeAuthor}
          {
             authors.map((author, index) => {
                return (
                   <option key={index}> {author.name} </option>
                )
             })
      </select>
  )
}
export default AddPostModal;

如果有人有解决方案,请告诉我,因为您会节省我的时间。预先非常感谢。

3 个答案:

答案 0 :(得分:0)

API异步返回结果,因此您可以做的是先对null进行简单的authors检查。从技术上讲,.map()仅可在数组上调用,而null则将您在解决方案中看到的错误引发。

尝试以下操作:

<select value={authorName}
        onChange={handleChangeAuthor}>
          {
             authors && authors.map((author, index) => {
                return <option key={index}> {author.name} </option>
          })
</select>

希望对您有帮助!

答案 1 :(得分:0)

根据情况,您Post组件中的this.props.author可以是nullundefined。因此,我更喜欢仅在AddPostModal不是this.props.authornull的情况下才打电话给undefined,因为this.props.author AddPostModal >

Post组件上:

const mapStateToProps = (state) => {
     return {
       authors: state.authorName.authors || []
     };
   }

答案 2 :(得分:0)

首先,请确保您的initialState.authors[]。其次,确保state.authorsName中的mapStateToProps正确指向authorName减速器的状态。否则,它可能应该像authors: state.authors