【问题标题】:React component cannot map and render data in an array from an APIReact 组件无法从 API 映射和呈现数组中的数据
【发布时间】:2017-07-23 22:08:24
【问题描述】:

我正在使用 react、redux、axios 和 redux-thunk 来处理异步。

我感觉解决方案将是显而易见的,但由于某种原因,我无法映射一组用户(从本地 express/node api 检索)并呈现每个用户。用户的信息将登录到控制台,但...

<p>NO USERS FOUND</p> 

...组件被渲染到屏幕上。

这是我的仓库:https://github.com/tedjames/reduxTest

这是我的组件的样子:

import React, { Component } from 'react';
import { connect } from 'react-redux'
import { getUsers } from '../redux/actions'

class App extends Component {
  componentWillMount() {
    console.log(this.props);
    this.props.getUsers();
  }

  render() {
    if (this.props.users[1]) {
      this.props.users.map((user) => {
        console.log("USER FOUND!");
        console.log(user.email);
        return <p key={user.id}>USER FOUND: {user.email}</p>
      });
    } else {
      return <p>NO USERS FOUND</p>
    }
  }
}

const mapStateToProps = state => {
  return {
    users: state.admin.users
  };
};

export default connect(mapStateToProps, { getUsers })(App);

这是我使用 axios 获取用户的操作:

import axios from 'axios'
import { GET_USERS } from './types'

export const getUsers = () => {
  return (dispatch) => {
    axios.get('http://localhost:3090/users')
      .then(res => {
        console.log("<-- // DATA RECEIVED FROM SERVER // --> ");
        console.log(res);
        dispatch({ type: GET_USERS, payload: res.data })
      })
      .catch(({ response }) => {
        console.log("// ERROR RECEIVED FROM SERVER //");
        console.log(response);
      });
  }
};

This is what my console outputs

【问题讨论】:

    标签: javascript reactjs redux axios redux-thunk


    【解决方案1】:

    您必须在render 中返回数组(并将其包装在某个标签中):

    return (
      <div>{ this.props.users.map((user) => {
          console.log("USER FOUND!");
          console.log(user.email);
          return <p key={user.id}>USER FOUND: {user.email}</p> }
      </div> 
     );
    

    【讨论】:

    • 我想指出,在渲染返回中进行映射不是好的做法(或者就此而言,进行任何类型的逻辑流程)。最好把所有的逻辑放到 return 语句之前,然后在 return 中使用变量名,用 JSX。
    • 是的!谢谢凯撒:D
    • 嘿,nbkhope,那会是什么样子?我无法按照您推荐的方式进行设置 - 没关系,明白了!
    • 我认为@nbkhope 是在建议我在此示例中的代码结构:gist.github.com/markerikson/47fff93c92286db72b22bab5b02e2da3
    • @markerikson 是的,太好了!谢谢你的分享。 JSX 应该看起来干净漂亮。作为附加说明,有时您也可以将逻辑拉入它自己的单独函数并从 JSX 内部调用它,而不是在返回之前拥有一些东西。
    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多