Context

上下文也是 Gyron 中的一个重要部分,很多功能都是依靠上下文进行实现。比如 Router 库提供的 userRouter,还比如 Redux 库提供的 useStore 都是通过上下文信息实现的。

Provide & Inject

有的时候我们可能不关心组件中间发生了什么,而是需要知道上上层组件的内容,表单的数据管理就是一个很好的例子。

表单数据传递往往会遇到层级问题,中间可能会穿插多个 layout 组件进来,有的时候又会忘记将数据往下进行传递,我们可以通过 Provide 和 Inject 进行跨组件通讯。

form.jsx
import { useReactive, useProvide, FC } from 'gyron'
import { FormItem } from './formItem'

const Form = FC(() => {
  const state = useReactive({
    value: 'Gyron.js',
  })

useProvide()('form-data', state)
return <FormItem></FormItem> })

我们先声明了一个 Form 表单组件,使用了一个通用的 FormItem 组件管理表单输入的每一项。

formItem.jsx
import { Input, FC } from './input'

const FormItem = FC(() => {
  return <Input />
})

FormItem 在这里只是为了简单表明中间有一个层级,实际在使用过程中可能会遇到更多的组件嵌套。

input.jsx
import { useInject, FC } from 'gyron'

const Input = FC(() => {
const state = useInject()('form-data')
return ( <input value={state.value} onChange={(e) => (state.value = e.target.value)} /> ) })

Input 组件使用 useInject 接收 Form 表单传递过来的数据,然后在这里对数据进行更改。

RootContext

RootContext 主要服务于第三方库的开发者,它需要结合 createPlugin 方法一起使用。更详细的信息可以阅读链接里的内容。插件