首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >React/Redux不能在状态下迭代数组

React/Redux不能在状态下迭代数组
EN

Stack Overflow用户
提问于 2016-08-16 12:10:34
回答 1查看 1.9K关注 0票数 1

我正在学习React/Redux,我在将我的一个网页应用程序转换为框架/范例时遇到了一个问题。我要做的是让web应用程序的初始状态有一个数组,该数组由来自API请求的对象填充,这个数组称为“make”。我想这样做,以便我可以显示从API的API在网站的第一页,在它加载。这可以在下面的index.js文件中看到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import App from './App';
import './index.css';
import configureStore from './redux/store'
import { Provider } from 'react-redux'

let makesUrl = 'the url to the API'
let cached = cache.get(makesUrl)
let makes = []

// Future cache setup.
if(!cached) {
    console.log("NOT CACHED")
}
else {
    console.log("CACHED")
}

// Get the makes via API.
fetch(makesUrl).then((response) => {
    // Pass JSON to the next 'then'
    return response.json()
}).then((json) => {
    json.makes.forEach((make) => {
        makes.push(make)
    })
})

let initialState = {
  grids: [],
  makes: makes
}

let store = configureStore(initialState)

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);

statedispatch被映射到道具,并传递到需要它们的组件,在我的App.js文件中,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import './App.css'
import Head from './components/Head'
import Middle from './components/Middle'
import Foot from './components/Foot'
import actions from './redux/actions'

class App extends Component {

  render() {
    return (
      <div className="App">
        <div>
          <Head />
          <div className="middle container">
            <Middle actions={this.props.actions} makes={this.props.makes}/>
          </div>
          <Foot />
        </div>
      </div>
    );
  }
}

function mapStateToProps(state) {
  return state
}

function mapDispatchToProps(dispatch) {
  return {
    actions: bindActionCreators(actions, dispatch)
  }
}

export default connect(mapStateToProps, mapDispatchToProps)(App)

无论如何,在chrome工具中,我可以看到API调用是成功的,并且状态显示有62个对象在其中,但是如果我控制台记录了这些组件中数组的长度,如下所示,它表示长度为0,数组的每个索引都是未定义的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react'

    class MakeButtons extends Component {

        handleClick(event) {
            event.preventDefault()
            console.log("CLICK")
        }

        render() {
            return(
                <div>
                    {
                        console.log(this.props.makes.length)
                    }
                </div>
            )
        }
    }

    export default MakeButtons

这基本上是我在过去几个小时里一直在试图找出的,所以我可以使用forEachmap函数为数组中的每个对象返回链接/按钮,但是目前这种方法不起作用,尽管开发工具显示状态是正常的。任何帮助/解释都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-16 14:44:12

因此,您确实需要为您的init设置一个动作/还原器,然后您可以在componentWillMountcomponentDidMount中调用它们,因为它们在加载应用程序时只被调用一次。

按照现在的方式,您有一个fetch和一个应用程序,它使用fetch中的数据,在启动应用程序之前不等待异步调用完成。

您只想创建init操作,所以您的操作创建者应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   import * as services from './services';

   function initMyAppDispatcher(type, data, status) {
       return {
          type, 
          data,
          status
        };
   }


   export function initMyApp(dispatch, makesUrl) {
      dispatch(initMyAppDispatcher(actions.INIT_APP, {}, 'PENDING');

      return services.myInitCall(makesUrl)
         .then((data) =>
             dispatch(initMyAppDispatcher(actions.INIT_APP, data, 'SUCCESS'),
            (error) =>
             dispatch(initMyAppDispatcher(actions.INIT_APP, error, 'FAILURE'),
         )
         .catch(yourErrorHandling);
   }

然而,Services.myInitCall想要实现它,只需确保将其导出为承诺即可。在您的情况下,只要您能够访问该行,就可以用fetch(makesUrl)替换它。然后让它像这样设置,你可以像这样设置你的减速器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   case actions.INIT_APP:
            if (action.status) {
                switch (action.status) {
                    case PENDING:
                        //you can use this to create a "loading" state like a spinner or whatever
                        return state;
                    case SUCCESS:
                        // note: this is immutablejs syntax, use whatever you prefer
                        return state.set('makes', action.data);
                   case FAILURE:
                        return state;

                    default:
                        return state;
                }
            }
            return state;

需要注意的一点是,我在操作创建者中有分派,因为我使用mapDispatchToProps来代替mapToProps。你的容器看起来是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import * as actionCreators from './action-creators';

function mapStateToProps(state) {

    return {
        makes: state.get('makes')
    };
}

function mapDispatchToProps(dispatch, ownProps) {
    return {
        initMyApp: actionCreators.initMyApp.bind(null, dispatch)
    };
}


export default function(component = Component) {
    return connect(mapStateToProps, mapDispatchToProps)(component);
}

然后在组件componentWillMountcomponentDidMount中,传入并调用init函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   componentDidMount() {
       this.props.initMyApp();

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

https://stackoverflow.com/questions/38983618

复制
相关文章
Windows系统安全|Windows中获取用户密码
Windows系统使用两种方法对用户的密码进行哈希处理,它们分别是 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。所谓哈希(hash),就是使用一种加密函数对其进行加密。这个加密函数对一个任意长度的字符串数据进行一次数学加密函数运算,然后返回一个固定长度的字符串。
谢公子
2022/01/19
2.9K0
Windows系统安全|Windows中获取用户密码
如何在小程序中获取用户信息
在以前的文章中,我们介绍了小程序的登录鉴权功能,方便开发者去获取用户的appid和session_key以便确认用户的身份。但是,仅仅通过appid和session_key不能去获取用户的信息。那么,这篇文章中,我们将介绍如何在小程序中获取用户的昵称、头像、性别、城市等信息。
it大叔
2019/01/25
6.7K0
如何在小程序中获取用户信息
PHP 获取用户行为参考代码 [IP/OS/URL/Broswer]
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/80015381
泥豆芽儿 MT
2018/09/11
7670
PHP 获取用户行为参考代码 [IP/OS/URL/Broswer]
如何在 Linux 中查找文件所有者?
在 Linux 系统中,每个文件和目录都有一个所有者(owner)和一个所属组(group)。所有者通常是创建该文件或目录的用户,而所属组通常是文件或目录所属的组。在某些情况下,您可能需要查找特定文件或目录的所有者。以下是在 Linux 中查找文件所有者的几种方法:
网络技术联盟站
2023/04/24
4.3K0
如何在 Linux 中查找文件所有者?
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息。最后由我用java实现linux上exe文件的版本号读取功能。下面是详细代码:
业余草
2019/01/21
6K0
如何在windows下和linux下获取文件(如exe文件)的详细信息和属性
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟真实的用户在浏览器中进行各种操作,如点击、输入、滚动等。Selenium支持多种浏览器,如Chrome、Firefox、Edge等,但是每种浏览器都需要相应的驱动程序才能与Selenium进行通信。本文将介绍如何在Selenium中使用Chrome浏览器,并且设置代理服务器来避免被目标网站识别。
jackcode
2023/07/26
8900
CSDN用户行为分析和用户行为数据爬取
爬虫随机从CSDN博客取得800条用户行为数据,包含用户名、原创博客数、评论数、浏览量,试着从博客数,评论数,浏览量三个方面分析csdn的博主们的形象。
逝兮诚
2019/10/30
1.6K0
如何在Windows中运行bash
当微软宣布,将在Windows10上面支持bash时,所有的Unix命令行用户都为之雀跃了。上周三,微软发布了一个测试版本,开始支持了这项功能。 为了运行bash,首先要进行几步操作。首先,需要获得Windows10的build 14316。 安装内测版本之后,用户需要切换到开发者模式,从设置>更新(Settings > Updates),安全>开发者(Security > For Developers)打开新的设置页面,选择“Windows Subsystem for Linux (Beta)”,重启
CSDN技术头条
2018/02/11
3.8K0
如何在Windows中运行bash
浅谈用户行为分析
关于用户行为分析,很多互联网公司都有相关的需求,虽然业务不同,但是关于用户行为分析的方法和技术实现都是基本相同的。在此分享一下自己的一些心得。
数据社
2020/05/25
4.1K1
用户行为分析(Python)
电商、互联网、金融这三驾马车是对数据分析应用最为广泛的行业,同时也占据了就业市场上绝大多数的数据分析岗位,只因日常业务产生的海量数据蕴含着无尽的价值。 本次就通过电商角度,选取阿里天池项目中的淘宝App用户行为数据利用Python进行数据分析。
用户8949263
2022/04/08
4.7K0
用户行为分析(Python)
Flink在用户行为分析中的应用(一)
传统的企业营销大体是营销人员通过查询画像标签库去圈选人群,这种方案往往无法抓住那些"转瞬即逝的机会"
隐约喜欢萌萌哒
2022/09/03
1.2K0
Pulumi 如何在 Windows 环境中设置
没有安装文件, Pulumi 没有安装文件,所以你不能按照下载后安装的方式来进行配置。
HoneyMoose
2021/05/21
2K0
Pulumi 如何在 Windows 环境中设置
如何在Linux中搭建Windows环境
众所周知,搭建网站最好用是Linux系统,但是有一些Windows软件没法运行在Linux服务器上,就很痛苦
雾海梦曦
2022/11/14
1.5K0
如何在Linux中搭建Windows环境
多维用户行为模型
多维用户行为模型核心思想是在数据仓库的DWD和DWS层回答 "用户(User) 在什么时间(When),什么地点(Where), 通过何种方式(How), 对谁(Who,可能是feed,也可能是user), 做了什么(What或者Event)",一般是基于ODS层的用户维度表,用户行为日志明细表数据,在DWD加工而成,然后直接服务上层应用(建视图的方式)或者根据需求配合产品维度表在DWS汇总面向业务应用。常见的是用户行为分析的漏斗转化,桑吉图显示, 用户统计标签加工等。
平常心
2020/10/24
1.5K0
如何使用“行为模型”做用户行为养成
用户可能会习惯性的使用一款产品,或者在使用一款产品时会产生习惯性的行为。造成这种情况的原因可以有很多,比如不断的刷朋友圈生怕错过什么信息、比如刷抖音熬夜停不下来、比如每天都要开黑一局…
晓吾
2022/01/21
1.8K0
如何使用“行为模型”做用户行为养成
Flink用户画像用户画像行为特征
我们要使用的几个组件为Hadoop 2.6,HBase 1.0.0,MySQL 8,zookeeper 3.4.5,kafka 2.1.0,Flink 1.13,Canal 1.1.5。为了方便,这里都使用伪集群和单机安装。
算法之名
2021/11/10
8.8K0
如何在gin中获取响应体内容?
实现思路: 对gin的responseWriter进行包装, 每次写往请求方写响应数据的时候,将响应数据返回出去。step1: 定义一个新的CustomResponseWriter,通过组合方式持有一个gin.ResponseWriter和response body缓存。type CustomResponseWriter struct { gin.ResponseWriter body *bytes.Buffer}func (w CustomResponseWriter) Write(b []byt
Johns
2021/04/10
11.6K0
如何在gin中获取响应体内容?
如何在Bash中获取数组长度?
在Bash脚本中,数组是一种常用的数据结构,用于存储多个值。在处理数组时,经常需要知道数组的长度,即数组中元素的个数。本文将详细介绍如何在Bash中获取数组长度的方法,以帮助您更好地处理数组操作。
网络技术联盟站
2023/06/17
1.3K0
如何在Bash中获取数组长度?
点击加载更多

相似问题

如何在windows中获取所有者的用户in?

20

如何在windows中获取当前用户?

20

如何在Windows SAS中获取sas文件的所有者信息?

11

Windows中的C#获取文件所有者

11

如何在Windows7上获取gethostid行为?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文