- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个简单的路由器(从 redux-router
开始,切换到 react-router
以消除变量)。
<Router history={history}>
<Route component={Admin} path='/admin'>
<Route component={Pages} path='pages'/>
<Route component={Posts} path='posts'/>
</Route>
</Router>
Admin 组件基本上只是带有一些导航的 {this.props.children}
;它不是 connect
ed 组件。
Pages 组件是一个使用 mapStateToProps()
进行连接
的组件,如下所示:
function mapStateToProps (state) {
return {
pages: state.entities.pages
};
}
帖子更有趣:
function mapStateToProps (state) {
let posts = map(state.entities.posts, post => {
return {
...post,
author: findWhere(state.entities.users, {_id: post.author})
};
}
return {
posts
};
}
然后当我加载页面或在 Posts/Pages 路由之间切换时,我在 console.log() 中得到以下信息。
// react-router navigate to /posts
Admin render()
posts: map state to props
Posts render()
posts: map state to props
Posts render()
posts: map state to props
// react-router navigate to /pages
Admin render()
pages: map state to props
Pages render()
pages: map state to props
所以我的问题是:为什么 mapStateToProps
在路线更改时被多次调用?
另外,为什么 mapStateToProps
中的一个简单的 map
函数会导致它在 Posts 容器中被第三次调用?
我正在使用 Redux 文档中的基本 logger
和 crashReporter
中间件,它没有报告任何状态更改或崩溃。如果状态没有改变,为什么组件要渲染多次?
最佳答案
根据 react-redux
的经验,您不应该在 mapStateToProps
中处理存储属性,因为 connect
uses shallow checking of bound store attributes to check for diff .
要检查您的组件是否需要更新,react-redux
调用 mapStateToProps
并检查结果的第一级属性。如果其中一个更改(===
相等性检查),组件将更新为新的 props。在您的情况下,每次调用 mapStateToProps
时,posts
都会更改(map
转换),因此您的组件会在每次商店更改时更新!
您的解决方案是只返回您商店属性的直接引用:
function mapStateToProps (state) {
return {
posts: state.entities.posts,
users: state.entities.users
};
}
然后在您的组件中,您可以定义一个函数来按需处理您的数据:
getPostsWithAuthor() {
const { posts, users } = this.props;
return map(posts, post => {
return {
...post,
author: findWhere(users, {_id: post.author})
};
});
}
关于javascript - React-redux connect() 的 mapStateToProps 在 react-router 导航中被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33573223/
我正在尝试使用 mapStateToProps 像这样: const mapStateToProps = (state: { logedIn: boolean; } ) => { return {
这个问题在这里已经有了答案: React - User-Defined JSX Components Not rendering (1 个回答) 4年前关闭。 我正在尝试创建一个使用 mapState
我有这个错误: TypeError: Cannot read property 'map' of undefined 并且不知道如何this.props.movies未定义,而我将initialS
我正在学习如何从头开始实现 redux,并且遇到了组件重新渲染的问题。我在 StackOverflow 上搜索这个问题已经产生了无数的结果,其中问题的答案总是“你改变了你的状态”。我已经阅读了 con
react/redux 新手。想知道为什么我的组件在触发操作时没有刷新。也不确定 reducer 是否是操作存储的好地方,但它是纯粹的,所以它应该可以工作。 发生的情况是操作被触发并且存储被更新。但是
我现在正在开发一个项目,其中涉及相当多的团队,并且变量初始化和传递到商店的地方有点困惑。 商店看起来主要是这样的。 const initialState = { myStoreData: nu
我知道我们可以通过这样做轻松地在组件状态中发送 mapStateToProps 的内容: constructor(props){ super(props); this.state = {
import React, { Component, Fragment } from "react"; import { connect } from "react-redux"; import {
我是 react 新手,无法调试为什么 mapStateToProps 没有运行。请参阅 login.js 中的最后一个函数。 我已在 mapStateToProps 函数中添加了警报语句,但它只是没
我正在调用我的 API 以使用其 ID 获取特定对象。 当我在 mapStateToProps 方法中调用 console.log 时,打印了整个对象,但状态的“anuncio”属性未定义当我尝试使用
我正在用头撞墙。我已经使用 React+Redux 顺利运行了一段时间,然后我使用 Chrome 删除了我的 localStorage,一切都变得一团糟。现在我无法让 mapStateToProps
我的 React 应用程序遇到一些问题。我正在尝试对用户进行身份验证并从后端获取一些数据,而 mapStateToProps 没什么问题。这就是我成功获得唯一用户的方法: const mapStat
我正在尝试使用 redux 将员工数据存储在商店中,但是当我尝试使用 mapStateToProps 访问商店时,它返回空数组,并且被调用两次。第一次状态有值,但第二次当我检查它时它会返回空数组 re
有没有类似mapStateToProps的函数,可以让我们在React中把Redux状态连接到函数式组件上? 将状态作为 props 从父组件传递是唯一的解决方案吗? 最佳答案 您绝对可以将 mapS
我刚开始玩 react/redux。我只想输入一些文本并点击提交,然后将其传递给另一个组件,该组件将显示输入的内容。 我知道我可以从 A 点到 B 点获取数据,因为如果我使用 store.subscr
我有一个带有 Redux 存储的 React 应用程序,它连接到 websocket 并在表格中向用户显示信息。我有 RxJs 中间件,它连接到 websocket 并使用内容分派(dispatch)
我说的是 connect 的 mapStateToProps 参数. 我的一个组件有一个名为 rules 的属性,它是一个函数数组。在 mapStateToProps 中,我调用这些规则,传入当前状态
我正在学习 React 和 Redux,发现了以下我无法理解的问题,我存储了一个可能如下所示的配置对象: { general:{duration:100,strength:100},
我需要访问容器内 redux 状态的特定属性。这些属性将依次用作获取其他嵌套属性并将它们映射到组件 props 的键。我使用immutableJS。 是在 mapStateToProps 中执行此操作
我正在寻找有关处理 mapStateToProps 中错误的最稳健、最可靠方法的建议,以及是否建议在 React+Redux 应用程序中尝试此级别。 例如,如果我将 react-redux 的 con
我是一名优秀的程序员,十分优秀!