MST

星途 面试题库

面试题:React高阶组件中Context的基础使用

请描述在React高阶组件中如何引入和使用Context来共享数据,假设存在一个主题切换的场景,父组件提供主题(亮色或暗色),多个子组件通过高阶组件包裹后使用该主题,写出实现此功能的关键代码步骤和核心逻辑。
24.6万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试
  1. 创建 Context
    import React from'react';
    
    const ThemeContext = React.createContext();
    
    export default ThemeContext;
    
  2. 父组件提供主题数据
    import React, { useState } from'react';
    import ThemeContext from './ThemeContext';
    
    const ParentComponent = () => {
        const [theme, setTheme] = useState('light');
        const toggleTheme = () => {
            setTheme(theme === 'light'? 'dark' : 'light');
        };
    
        return (
            <ThemeContext.Provider value={{ theme, toggleTheme }}>
                {/* 子组件在此处渲染 */}
            </ThemeContext.Provider>
        );
    };
    
    export default ParentComponent;
    
  3. 创建高阶组件
    import React from'react';
    import ThemeContext from './ThemeContext';
    
    const withTheme = (WrappedComponent) => {
        return (props) => {
            const context = React.useContext(ThemeContext);
            return <WrappedComponent {...props} theme={context.theme} toggleTheme={context.toggleTheme} />;
        };
    };
    
    export default withTheme;
    
  4. 子组件使用高阶组件
    import React from'react';
    import withTheme from './withTheme';
    
    const ChildComponent = ({ theme, toggleTheme }) => {
        return (
            <div>
                <p>当前主题: {theme}</p>
                <button onClick={toggleTheme}>切换主题</button>
            </div>
        );
    };
    
    export default withTheme(ChildComponent);
    

核心逻辑

  • 首先通过 React.createContext 创建一个 ThemeContext,用于在组件树中传递主题相关数据。
  • 父组件通过 ThemeContext.Provider 提供主题数据(themetoggleTheme 方法),这些数据会被传递给所有后代组件。
  • 高阶组件 withTheme 使用 React.useContext 获取 ThemeContext 中的数据,并将其作为属性传递给包裹的子组件。
  • 子组件通过高阶组件包裹后,可以接收并使用这些主题相关的数据,实现主题切换的功能。