首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在智能容器中定义函数时保持组件的纯净?

如何在智能容器中定义函数时保持组件的纯净?
EN

Stack Overflow用户
提问于 2016-08-30 15:34:55
回答 2查看 181关注 0票数 4

我在我的应用程序中使用了react,redux和immutablejs。商店是不可变的,并且映射到道具上。当将分派映射到道具时,我提供了助手函数。辅助函数可与redux TodoList示例中的代码进行比较:

代码语言:javascript
复制
const mapDispatchToProps = (dispatch) => {
  return {
    onTodoClick: (id) => {
      dispatch(toggleTodo(id))
    }
  }
}

我目前遇到的问题是,我的纯组件呈现得太频繁了:上面的连接创建了每个连接的onTodoClick函数。当PureRenderMixin shallowCompares将currentProps标记为newProps时,它会将组件标记为shouldUpdate,因为指针已经更改。

如何在容器中定义助手函数,同时保持组件的呈现计数低?

我已经看过了重新选择,但计划只用于计算mapStateToProps中的派生状态。是否最好为您所做的每一个连接创建一个选择器,这样您的功能也会被回传?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-16 07:28:55

这可能是一次黑客攻击,但您可以根据dispatch参数(假设redux总是为同一个存储发送相同的函数)来回溯该函数:

代码语言:javascript
复制
let lastDispatch;
let dispatchProps;
const mapDispatchToProps = (dispatch) => {
  if (!dispatchProps || dispatch !== lastDispatch) {
    dispatchProps = {
      onTodoClick: (id) => {
        dispatch(toggleTodo(id))
      }
    }
    lastDispatch = dispatch;
  }
  return dispatchProps;
}

或者使用“房客回忆录”:

代码语言:javascript
复制
const mapDispatchToProps = _.memoize((dispatch) => {
  return {
    onTodoClick: (id) => {
      dispatch(toggleTodo(id))
    }
  }
})

更新:这不是黑客,它似乎与他们的官方文档一致:

注意:在需要对呈现性能进行更多控制的高级场景中,mapDispatchToProps()还可以返回一个函数。在本例中,该函数将用作特定组件实例的mapDispatchToProps()。这允许你做每个实例的回忆录。您可以参考#279和它添加的测试来获得更多细节。大多数应用程序都不需要这个。

请参阅:https://github.com/reactjs/react-redux/blob/master/docs/api.md#connectmapstatetoprops-mapdispatchtoprops-mergeprops-options

票数 2
EN

Stack Overflow用户

发布于 2018-06-05 17:23:03

油门功能在房车可以解决您的问题。它将确保组件最多每x毫秒呈现一次。

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

https://stackoverflow.com/questions/39231731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档