-ref 和 context
ref: 用于获取真实dom
1. ref必须在挂载后才能获取,通常在componentDidMount中获取 2. ref获取组件,不能获取函数组件
import './App.css';
import React from 'react';
import Son from './Son.js';
let div1 = React.createRef();
let sonCom = React.createRef();
class App extends React.PureComponent {
state = {
mes: "父组件"
}
componentDidMount() {
console.log(div1.current);
console.log(sonCom.current.f1());
}
render() {
return <div className="App">
<div>
{this.state.mes}
</div>
<Son ref={sonCom}></Son>
</div>
} a
}
export default App;
import React from 'react';
class Son extends React.Component {
state = {
sonMes: "子组件"
}
f1() {
console.log("子组件f1");
}
render() {
return (
<div> </div>
);
}
}
export default Son;
context: 用于嵌套很深的爷孙组件之间context共享数据
1. 子组件使用父组件创建的context对象,不能自己创建
App.jsx
import './App.css';
import React from 'react';
import Son from './Son.js';
let sonCom = React.createRef();
export let Context1 = React.createContext();
class App extends React.PureComponent {
state = {
mes: "父组件",
passMes: "pass message"
}
render() {
return <div className="App">
<div>
{this.state.mes}
</div>
<Context1.Provider value={{ mes1: this.state.passMes, mes2: "pass message 2" }}>
<Son ref={sonCom}></Son>
</Context1.Provider>
</div>
} a
}
export default App;
GrandSon.jsx
import React from 'react';
import { Context1 } from './App';
class GrandSon extends React.Component {
state = {
grandsonMes: "孙子组件"
}
f1() {
console.log("孙子组件f1");
}
render() {
return (
<div className='grandSon'>
{this.state.grandsonMes}
<Context1.Consumer>
{
(value) => {
return <div>{value.mes1}</div>
}
}
</Context1.Consumer>
</div>
);
}
}
export default GrandSon;