我设法将这段代码重构为现在的样子,但是我认为它可以变得更好,更干净
const App = config => createStackNavigator({ /* */ }, config)
const SignIn = config => createStackNavigator({ /* */ }, config)
const SignUp = config => createStackNavigator({ /* */ }, config)
const stackNavigatorConfig = { /* */ }
const stacks = {
SignUp: SignUp(stackNavigatorConfig),
SignIn: SignIn(stackNavigatorConfig),
App: App(stackNavigatorConfig),
Loading,
}
const switchNavigatorConfig = { /* */ }
const Navigator = compose(
createAppContainer,
createAnimatedSwitchNavigator
)(stacks, switchNavigatorConfig)
export default Navigator
我会咖喱createStackNavigator
,并使用R.applySpec
创建stack
函数,并使用R.useWith
生成createNavigator
函数。现在,您只需要传递配置即可获得Navigator
。
代码示例(未测试):
const curriedCreateStackNavigator = R.curry(createStackNavigator)
const stacks = R.applySpec({
SignUp: curriedCreateStackNavigator({ /* */ }),
SignIn: curriedCreateStackNavigator({ /* */ }),
App: curriedCreateStackNavigator({ /* */ }),
Loading: R.always(Loading),
})
const createNavigator = R.useWith(R.compose(
createAppContainer,
createAnimatedSwitchNavigator
), [stacks, R.identity])
const switchNavigatorConfig = { /* */ }
const stackNavigatorConfig = { /* */ }
export default createNavigator(stackNavigatorConfig, switchNavigatorConfig)