面试题答案
一键面试- 共享状态的方法:
- 通过上下文(Context):Solid.js 中可以使用
createContext
来创建上下文,这允许父组件向子组件传递数据,而不需要在组件树中层层传递。父组件提供数据,子组件消费数据,这样可以有效地共享状态。 - 状态提升:将需要共享的状态提升到最近的共同父组件,然后通过 props 传递给子组件。对于嵌套路由组件来说,父路由组件就是这个共同父组件,它管理的全局状态可以通过 props 传递给子路由组件。
- 通过上下文(Context):Solid.js 中可以使用
- 代码示例:
- 首先,安装 Solid.js 及其路由库
solid - router
:npm install solid - js solid - router
- 假设我们有一个父路由组件
App
,管理用户登录信息状态,并包含子路由组件:import { createContext, createSignal } from "solid - js"; import { Router, Routes, Route } from "solid - router"; // 创建上下文 const UserContext = createContext(); const App = () => { const [isLoggedIn, setIsLoggedIn] = createSignal(false); return ( <UserContext.Provider value={{ isLoggedIn, setIsLoggedIn }}> <Router> <Routes> <Route path="/" component={Home} /> <Route path="/profile" component={Profile} /> </Routes> </Router> </UserContext.Provider> ); }; const Home = () => { const { isLoggedIn } = UserContext.useContext(); return ( <div> <h1>Home Page</h1> {isLoggedIn()? <p>You are logged in.</p> : <p>Please log in.</p>} </div> ); }; const Profile = () => { const { isLoggedIn } = UserContext.useContext(); return ( <div> <h1>Profile Page</h1> {isLoggedIn()? <p>Welcome to your profile.</p> : <p>Please log in to view your profile.</p>} </div> ); }; export default App;
- 在上述代码中:
App
组件创建了isLoggedIn
状态,并通过UserContext.Provider
将状态传递下去。Home
和Profile
子路由组件通过UserContext.useContext()
来获取共享状态,并根据状态进行不同的渲染,既实现了布局管理又保证了 Solid.js 的响应式原理。
- 首先,安装 Solid.js 及其路由库