面试题答案
一键面试- 创建Context:
- 使用
createContext
函数从react
库中创建一个Context
对象。例如:
import React from'react'; const LanguageContext = React.createContext(); export default LanguageContext;
- 使用
- 传递语言信息:
- 在应用的较高层级组件(通常是靠近根组件的位置)使用
Context.Provider
来包裹需要国际化的部分,并通过value
属性传递语言相关信息。 - 假设我们有一个
App
组件,并且维护了一个language
状态以及对应的语言资源对象languageResources
:
import React, { useState } from'react'; import LanguageContext from './LanguageContext'; const languageResources = { en: { greeting: 'Hello' }, zh: { greeting: '你好' } }; function App() { const [language, setLanguage] = useState('en'); return ( <LanguageContext.Provider value={{ language, languageResources }}> {/* 应用的其他组件 */} </LanguageContext.Provider> ); } export default App;
- 在应用的较高层级组件(通常是靠近根组件的位置)使用
- 在组件中消费这些信息:
- 使用
Context.Consumer
(旧方法):- 在需要使用国际化信息的组件中,引入
LanguageContext
,然后使用Context.Consumer
包裹需要的部分,并在render
函数中获取Context
的值。
import React from'react'; import LanguageContext from './LanguageContext'; function Greeting() { return ( <LanguageContext.Consumer> {({ language, languageResources }) => ( <div>{languageResources[language].greeting}</div> )} </LanguageContext.Consumer> ); } export default Greeting;
- 在需要使用国际化信息的组件中,引入
- 使用
useContext
Hook(新方法,React 16.8+):- 引入
useContext
Hook和LanguageContext
,通过useContext
获取Context
的值。
import React, { useContext } from'react'; import LanguageContext from './LanguageContext'; function Greeting() { const { language, languageResources } = useContext(LanguageContext); return <div>{languageResources[language].greeting}</div>; } export default Greeting;
- 引入
- 使用