小编Leo*_*eon的帖子

Redux动作中的Ge​​tters-React Native

我想拥有一些函数,这些函数可以获取当前状态以对其进行一些逻辑处理,而不必通过参数将当前状态传递给函数。

这是我的例子。

在我的操作文件中,我有:

export const addToSearchHistory = (newSearch) => ({type: ADD_TO_SEARCH_HISTORY, newSearch})
export const addToCardHistory = (newCard) => ({type: ADD_TO_CARD_HISTORY, newCard})
Run Code Online (Sandbox Code Playgroud)

例如,我想拥有一个“ getter”功能,该功能告诉我“搜索历史”是否达到10个项目。所以我所做的是:

export const searchHasMaxHistory = () => (dispatch, getState) => {
  var state = getState()
      search = state.search

  return search.history == 10 ? true : false
}
Run Code Online (Sandbox Code Playgroud)

我将此功能与其他带有bindActionCreators的“真实”动作绑定在一起:

const mapDispatchToProps = (dispatch) => {
  return bindActionCreators({
    addToSearchHistory,
    addToCardHistory,

    searchHasMaxHistory
  }, dispatch)
} 
Run Code Online (Sandbox Code Playgroud)

因此,我可以像执行任何常规操作一样使用它。它运作良好,并且完全符合我的要求。

但是真正的问题是,是否像动作一样将其绑定为反模式却没有返回动作?我这样做会遇到问题吗?是否有“正确”的解决方案?

javascript react-native react-redux

6
推荐指数
1
解决办法
4839
查看次数

if 语句中 setState() 的问题

if 语句中的 setState() :

// morePage = true
// pageNum = 1

if(morePage){
  this.setState({pageNum: this.state.pageNum+1})
}

console.log(this.state.pageNum); // return: 1
Run Code Online (Sandbox Code Playgroud)

setState() 输出 if 语句:

// morePage = true
// pageNum = 1

if(morePage){
  // ... 
}
this.setState({pageNum: this.state.pageNum+1})

console.log(this.state.pageNum); // return: 2
Run Code Online (Sandbox Code Playgroud)

我现在就面临这个问题,我想知道为什么......

谢谢 :)

正确答案后编辑:

所以是的,我应该花更多的时间阅读 React 的文档:P 如果有人有兴趣知道我最终是如何做到的,这里是答案:

在文档中,他们说无法保证您的状态在重新渲染之前将具有新的值。所以你必须使用“componentDidUpdate()”。

所以我所做的是,我把:

this.setState({pageNum: this.state.pageNum+1})
Run Code Online (Sandbox Code Playgroud)

在我创建的随机函数内,之后在“componentDidUpdate(prevProps, prevState)”函数中我可以访问新的和旧的 props 值,并且在那里我可以使用“pageNum”的先前值和当前值:)

javascript reactjs react-native

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×2

react-native ×2

react-redux ×1

reactjs ×1