如何使用 ramda 进一步编写此代码?

How to compose this code further using ramda?

我设法将这段代码重构为现在的样子,但我觉得它可以更好更简洁

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)