2017-07-11 48 views
2

如果狀態不存在,我可以在mapStateProps中調用動作嗎?,我想知道它是否不會影響性能,以及是否無意重新渲染。在mapStateProps中調用動作

或者我可以使用reselect來做,而不是在創建選擇時調用動作。

或者你有什麼建議如何做到這一點?由於

function mapStateToProps(state,ownProps) { 
 
    return { 
 
    reviewContentDetails: state.reviewsReducer.reviewContentDetails || callAnAction(ownProps._id), 
 
    }; 
 
} 
 

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

+0

我真的不明白你想要做什麼。當我的狀態不存在時,它將採用初始狀態(在我的代碼中提供)並使用此狀態。當然你可以調用一個動作(使用dispatch)。你能提供一個例子嗎? – Larce

+0

我已添加示例代碼@Larce –

回答

1

行動者必須在mapDispatchToProps取得

如:下面是測試組件

const Test = ({onclickTest}) =>{ 
    return <div> 
     <button onClick ={onclickTest}>Test Button</button> 
      </div> 

然後你在功能定義你的行動MAPD ispatchToProps

const mapDispatchToProps= {onclickTest : yourOnclickTestAction} 

最後,你可以用Redux的連接

export default connect (
    null, 
    mapDispatchToProps)(Test) 

PS:對於mapStateToProps我想你應該選擇工作。修復功能更容易。希望它對你有幫助^^

-1

是的,你可以,但它可能會導致比你打算解決更多的問題。狀態在減速器中最容易且明確地初始化,並且這是使用的模式。

如果您需要執行一次操作(如調度異步獲取或類似操作),最好在componentDidMount中執行它。

1

絕對不是。 A mapStateToProps函數應該只有從狀態樹中提取值並將它們作爲新對象返回。它應該從來沒有做任何異步工作,或開始任何其他行爲。

如果您需要根據值的更改調用函數,請在您的React組件中執行componentWillReceiveProps