面试题答案
一键面试- 创建Context:
- 在React应用中,首先要创建
Context
对象。假设创建一个UserRoleContext.js
文件。
import React from'react'; const UserRoleContext = React.createContext(); export default UserRoleContext;
- 在React应用中,首先要创建
- 传递Context:
- 在最外层组件中,通过
UserRoleContext.Provider
来传递userRole
。假设外层组件是App.js
。
import React from'react'; import UserRoleContext from './UserRoleContext'; import InnerComponent from './InnerComponent'; const App = () => { const userRole = 'admin';// 这里可以根据实际情况动态获取,比如从API获取 return ( <UserRoleContext.Provider value={userRole}> <InnerComponent /> </UserRoleContext.Provider> ); }; export default App;
- 在最外层组件中,通过
- 内层组件条件渲染逻辑:
- 在
InnerComponent.js
中,通过UserRoleContext.Consumer
来消费userRole
并进行条件渲染。
import React from'react'; import UserRoleContext from './UserRoleContext'; const InnerComponent = () => { return ( <UserRoleContext.Consumer> {userRole => { let buttons = null; if (userRole === 'admin') { buttons = ( <> <button>删除</button> <button>编辑</button> </> ); } else if (userRole === 'user') { buttons = <button>编辑</button>; } return buttons; }} </UserRoleContext.Consumer> ); }; export default InnerComponent;
- 在
在现代React中,也可以使用useContext
钩子来替代UserRoleContext.Consumer
,代码如下:
- 内层组件使用
useContext
:- 修改
InnerComponent.js
import React, { useContext } from'react'; import UserRoleContext from './UserRoleContext'; const InnerComponent = () => { const userRole = useContext(UserRoleContext); let buttons = null; if (userRole === 'admin') { buttons = ( <> <button>删除</button> <button>编辑</button> </> ); } else if (userRole === 'user') { buttons = <button>编辑</button>; } return buttons; }; export default InnerComponent;
- 修改