React.js 中的 Context API
react jsjavascript libraryfront end technology更新于 2025/11/7 1:16:17
React Context API 在 16.3 或更高版本中可以安全地在生产环境中使用。添加 Context API 的原因是为了避免在存在子组件链的情况下传递 props。
如果不使用 Context API,我们必须将 props 传递到所有中间组件。另一种解决方案是使用第三方库(例如 Redux)来维护中央存储。
理解 props 传递问题
App.js → 书籍 props → BookList.js → 再次将书籍作为 props 传递 → Book.js
随着子组件数量的增加,props 的传递链会不断延伸。
React 借助 context API,提供了一种提供程序消费者方法来解决这个问题。
Creating the context: BaseContext.js import React from 'react'; // 这与 Redux 的 createStore 方法相同 const BaseContext = React.createContext(); export default BaseContext;
Create the provider
import BaseContext from './BaseContext';
class BookProvider extends Component {
state = {
books: {
book1: { name: 'React', price: 500 },
book2: { name: 'Angular', price: 450 }
}
};
render() {
return (
<BaseContext.Provider
value={{
books: this.state.books,
incrementPrice: selectedID => {
const books = Object.assign({}, this.state.books);
books[selectedID].price =books[selectedID].price + 1;
this.setState({
books
});
},
decrementPrice: selectedID => {
const books = Object.assign({}, this.state.books);
books[selectedID].price =books[selectedID].price - 1;
this.setState({
books
});
}
}}
>
{this.props.children}
</BaseContext.Provider>
);
}
}
App.js
class App extends Component {
render() {
return (
<BookProvider>
<div className="App">
<header className="App-header">
<h1 className="App-title">Welcome to my book store</h1>
</header>
<ProductBookList />
</div>
</BookProvider>
);
}
}
在子组件中,我们可以使用消费者 −
const Books = () => (
<BaseContext.Consumer>
{context => (
<Fragment>
<h4>Books:</h4>
{Object.keys(context.books).map(bookID => (
<Car
key={bookID}
name={context.books[bookID].name}
price={context.books[bookID].price}
incrementPrice={() =>context.incrementPrice(bookID)}
decrementPrice={() =>context.decrementPrice(bookID)}
/>
))}
</Fragment>
)}
</BaseContext.Consumer>
);
通过使用 context api,我们可以避免在 React 子组件中进行 props 钻取。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

