反应本机导航参数和得墨忒耳定律
React native navigation params and demeter law
当你想访问通过导航传递的屏幕组件中的参数时(反应本机导航),你必须这样做,例如:
this.myParameter = this.navigation.state.params.myParameter
这是否违反得墨忒耳法则?如果您以后想使用深层链接怎么办?
一个解决方案是创建一个包装器组件,将导航参数映射为道具。
事实上,Demeter 法则(或最少知识原则)要求您的组件对导航对象的内部结构一无所知。
在我看来,最好的办法是传递给组件的导航对象已经有一个名为 params()
的函数,它会向您返回一个参数映射。
但是,由于情况并非如此,您可以自己添加它 - 通过引入一个间接层(通过您自己的函数看起来像 screenParamsFrom(navigation)
,或者您可以尝试挂接到导航对象并通过将导航对象提供给根导航器来自己添加函数:
<MyRootNavigator navigation={addNavigationHelpers({
dispatch: dispatch,
state: state,
params: paramsFunction})}/>
但是,在这种情况下,您必须自己管理状态(通过 Redux 或其他类似机制。请参阅 the integration guide)。
当你想访问通过导航传递的屏幕组件中的参数时(反应本机导航),你必须这样做,例如:
this.myParameter = this.navigation.state.params.myParameter
这是否违反得墨忒耳法则?如果您以后想使用深层链接怎么办?
一个解决方案是创建一个包装器组件,将导航参数映射为道具。
事实上,Demeter 法则(或最少知识原则)要求您的组件对导航对象的内部结构一无所知。
在我看来,最好的办法是传递给组件的导航对象已经有一个名为 params()
的函数,它会向您返回一个参数映射。
但是,由于情况并非如此,您可以自己添加它 - 通过引入一个间接层(通过您自己的函数看起来像 screenParamsFrom(navigation)
,或者您可以尝试挂接到导航对象并通过将导航对象提供给根导航器来自己添加函数:
<MyRootNavigator navigation={addNavigationHelpers({
dispatch: dispatch,
state: state,
params: paramsFunction})}/>
但是,在这种情况下,您必须自己管理状态(通过 Redux 或其他类似机制。请参阅 the integration guide)。