做房产网站需要多少钱,新手做地方门户网站,电子商务网站开发是什么,免费做效果图的软件背景#xff1a;在某些场景下#xff0c;你想在整个组件树中传递数据#xff0c;但却不想手动地在每一层传递属性#xff0c;你可以直接在React中使用强大的contextAPI 解决上述问题
在一个典型的React 中#xff0c;数据通过Props属性自下而上#xff08;由父及子…背景在某些场景下你想在整个组件树中传递数据但却不想手动地在每一层传递属性你可以直接在React中使用强大的contextAPI 解决上述问题
在一个典型的React 中数据通过Props属性自下而上由父及子进行传递的但这种做法对于某些类型的属性而言机器繁琐地区偏好UI主题这些属性是应用程序中许多组件都需要的。Context提供了一种在组件之间共享此值的方式而不必显式的通过组件树逐层传递props contextType只能用在类组件里 Consumer一般用在函数组件中 import React from ./react;
import ReactDOM from ./react-dom;
let ThemeContext React.createContext();
/* let ThemeContext React.createContext();
let { Provider, Consumer } ThemeContext; */
//ThemeContext{Provider,Consumer} Consumer一般用在函数组件中
function Header(){return (ThemeContext.Consumer{value(div style{{ margin: 10px, border: 5px solid ${value.color}, padding: 5px }}头部/div)}/ThemeContext.Consumer)
}
class Main extends React.Component {static contextType ThemeContextrender() {return (div style{{ margin: 10px, border: 5px solid ${this.context.color}, padding: 5px }}主体Content //div)}
}
class Content extends React.Component {static contextType ThemeContextrender() {return (div style{{ margin: 10px, border: 5px solid ${this.context.color}, padding: 5px}}内容button onClick{()this.context.changeColor(red)}变红/buttonbutton onClick{()this.context.changeColor(green)}变绿/button/div)}
}
class Page extends React.Component {constructor(props) {super(props);this.state { color: red };}changeColor (color) {this.setState({ color });}render() {let contextValue { color: this.state.color, changeColor: this.changeColor };return (ThemeContext.Provider value{contextValue}div style{{ margin: 10px, border: 5px solid ${this.state.color}, padding: 5px, width: 200px }}主页Header /Main //div/ThemeContext.Provider)}
}
ReactDOM.render(Page /, document.getElementById(root));react.js中相关代码
function createContext(){function Provider({value,children}){Provider._value value;return children;}function Consumer({children}){return children(Provider._value);}return {Provider,Consumer};
}