面试题答案
一键面试- 使用
createContext
创建上下文:- 在Solid.js中,通过
createContext
创建一个上下文对象。例如:
import { createContext } from'solid-js'; const MyContext = createContext();
- 在Solid.js中,通过
- 在顶层组件中提供上下文:
- 在顶层组件中,使用
MyContext.Provider
包裹需要传递数据的子树。将顶层组件中底层组件依赖的部分数据作为value
传递给Provider
。
import { createSignal } from'solid-js'; const TopLevelComponent = () => { const [data, setData] = createSignal({ // 假设顶层组件数据结构 mainData: 'frequently changing data', subData: 'data for bottom components' }); return ( <MyContext.Provider value={data().subData}> {/* 子组件树 */} </MyContext.Provider> ); };
- 在顶层组件中,使用
- 底层组件消费上下文:
- 在底层组件中,使用
MyContext.Consumer
或者createContext
返回的useContext
钩子(如果在函数组件内部)来获取上下文数据。 - 由于Solid.js的响应式原理,只有当上下文数据(
subData
)发生变化时,依赖它的底层组件才会更新。
const BottomComponent = () => { const subData = MyContext.useContext(); return ( <div>{subData}</div> ); };
- 在底层组件中,使用
这样,即使顶层组件的其他数据频繁变化,只要 subData
不变,底层组件就不会进行不必要的更新,从而实现性能优化。