面试题答案
一键面试- 创建自定义Hook:
- 首先,在Solid.js中创建自定义Hook需要定义一个函数,该函数以
use
开头。在这个例子中,我们创建一个用于管理用户登录状态的Hook。
import { createSignal } from'solid-js'; const useUserLogin = () => { const [isLoggedIn, setIsLoggedIn] = createSignal(false); const login = () => { setIsLoggedIn(true); }; const logout = () => { setIsLoggedIn(false); }; return { isLoggedIn, login, logout }; };
- 首先,在Solid.js中创建自定义Hook需要定义一个函数,该函数以
- 创建Context:
- 使用
createContext
来创建一个上下文对象,这个上下文对象将用于在组件树中传递状态。
import { createContext } from'solid-js'; const UserLoginContext = createContext();
- 使用
- 使用自定义Hook和Context实现状态共享:
- 创建一个提供上下文的组件,在这个组件中使用自定义Hook,并将Hook返回的状态和方法通过上下文传递下去。
import { createContext, createMemo } from'solid-js'; const UserLoginContext = createContext(); const UserLoginProvider = ({ children }) => { const userLogin = useUserLogin(); const value = createMemo(() => userLogin); return ( <UserLoginContext.Provider value={value()}> {children} </UserLoginContext.Provider> ); };
- 然后,在需要使用共享状态的子组件中,通过
UserLoginContext.Consumer
来消费上下文。
const SomeComponent = () => { const userLogin = UserLoginContext.useContext(); return ( <div> {userLogin.isLoggedIn()? ( <button onClick={userLogin.logout}>Logout</button> ) : ( <button onClick={userLogin.login}>Login</button> )} </div> ); };
- 在应用的顶层使用
UserLoginProvider
来包裹整个应用,使所有子组件都能访问到共享状态。
import { render } from'solid-js/web'; const App = () => { return ( <UserLoginProvider> <SomeComponent /> </UserLoginProvider> ); }; render(() => <App />, document.getElementById('app'));