当您想在通过导航传递的屏幕组件中访问参数(React Native Navigation)时,您必须这样做:
this.myParameter = this.navigation.state.params.myParameter
这是否打破了塞默法律?如果您想以后使用深层链接怎么办?
解决方案就是创建一个包装组件,该包装组件将导航参数映射为Props。
的确,Demeter的定律(或最少知识的原则)要求您的组件对导航对象的内部结构一无所知。
在我看来,最好的事情是传递到组件的导航对象已经具有称为params()
的函数,该功能可以将参数映射返回给您。
但是,由于事实并非如此,您可以自己添加它 - 通过引入间接层(通过自己的函数看起来像screenParamsFrom(navigation)
,或者您可以尝试将导航对象和通过向根导航器提供导航对象来自己添加功能:
<MyRootNavigator navigation={addNavigationHelpers({
dispatch: dispatch,
state: state,
params: paramsFunction})}/>
在这种情况下,您必须自己管理状态(通过REDUX或其他类似的机制。请参阅《集成指南》)。