react子组件向父组件传值
// 父组件
class App extends Component {
constructor(props) {
super(props)
this.state = {
test: '123'
};
}
parentClick(arg) {
this.setState({
test: arg
})
}
render() {
return (
<div>
<div>我是父组件</div>
{this.state.test}
<Child parentClick={this.parentClick.bind(this)}/>
</div>
);
}
}
//子组件
class Child extends Component {
handClick() {
this.props.parentClick('345')
}
render() {
return (
<div>
<button onClick={this.handClick.bind(this)}>子组件</button>
</div>
);
}
}
- 若子组件想要改变父组件的值,在父组件定义一个事件并传给子组件。
- 子组件通过点击按钮调用父组件定义的事件,并将需要传递的值作为参数。
- 在父组件事件中处理数据。
跨级组件之间传递数据
- 使用context (基于生产者-消费者模型)
import React, { Component } from 'react';
import Header from './Header.js'
export const ThemeContext = React.createContext({
background: 'red',
color: 'white'
});
class App extends Component{
render() {
return (
<ThemeContext.Provider value={{background: 'green', color: 'white'}}>
<Header />
</ThemeContext.Provider>
)
}
}
export default App;
// Child
import React,{Component} from 'react'
import Title from './Title'
class Header extends Component {
render () {
return (
<Title>Hello React Context API</Title>
);
}
}
export default Header
// Grandson
import React,{Component} from 'react'
import {ThemeContext} from './App'
class Title extends Component {
render () {
return (
<ThemeContext.Consumer>
{context => (
<h1 style={{background: context.background, color: context.color}}>
{this.props.children}
</h1>
)}
</ThemeContext.Consumer>
);
}
}
export default Title