3

我正在尝试将重新选择添加到我的反应代码中,但它似乎总是在重新渲染。

每次我改变我的状态时,即使输入选择器没有改变,控制台也会打印“测试”。我创建了一个简单的测试来向你们展示发生了什么。

import { connect } from 'react-redux'
import { createSelector } from 'reselect'

window.testObject = {'x': '5'}
const mapStateToProps = (state, props) => {

  const test = state => {return window.testObject}
  const getTest = createSelector(test, (t)=> console.log('testing'))

  return {
      test: getTest(state),
  }
}


export default const TestContainer = connect(
  mapStateToProps,
)(TestBase)

我究竟做错了什么??我一直在重新阅读文档,据我所知,console.log 在第一次之后不应该运行,因为输入选择器没有改变。我理解正确吗?

4

1 回答 1

8

createSelector每次重新渲染时,您都在调用

移动createSelectormapStateToProps 的外部

const getTest = createSelector(...)

const mapStateToProps = (state, props) => ({
  test: getTest(state),
})

export default const TestContainer = connect(
  mapStateToProps,
)(TestBase)
于 2016-05-24T01:08:47.427 回答