1. 子组件向父组件传值

父组件Header:

import Nav from 'Nav.js';
class Header extends React.Component {
constructor(props) {
super(props);
this.state = { }
this.callbackForNav = this.callbackForNav.bind(this);
}
callbackForNav({ selectedTopChannelOrder, selectedSubChannelOrder, selectedTopChannelName, selectedSubChannelName }) {
this.setState({
selectedTopChannelOrder,
selectedSubChannelOrder,
selectedTopChannelName,
selectedSubChannelName
})
}
render() {
return (<Nav channels={navChannelData} dynamicnav={dynamicNav} defaultSelectedTopChannelOrder={navDefaultTopOrder} defaultSelectedSubChannelOrder={navDefaultSubOrder} callbackFunc={this.callbackForNav} sticky="top" />)
}
}

子组件Nav:

class Nav extends React.Component {
constructor() {
this.state = {
selectedTopChannelOrder:0,
selectedSubChannelOrder:-1,
selectedTopChannelName: "",
selectedSubChannelName:""
}
}
static propTypes = {
callbackFunc: PropTypes.func
}
componentDidMount() {
const {selectedTopChannelOrder, selectedSubChannelOrder, selectedTopChannelName, selectedSubChannelName} = this.state;
this.props.callbackFunc({selectedTopChannelOrder, selectedSubChannelOrder, selectedTopChannelName, selectedSubChannelName})
}
clickSubChannel() {
this.setState({
selectedTopChannelOrder: topOrder,
selectedTopChannelName: topName,
selectedSubChannelOrder: subOrder,
selectedSubChannelName: subName
});
this.props.callbackFunc({
selectedTopChannelOrder: topOrder,
selectedTopChannelName: topName,
selectedSubChannelOrder: subOrder,
selectedSubChannelName: subName
});
} render() {
return (...)
}
}

2. 跨级组件传值

利用context

父组件:

class List extends React.Component {
static childContextType = {
color:PropTypes.string
} getChildContext() {
return {
color:'red'
}
}
render() {
return (...)
}
}

子组件:

class ListItem extends React.Component {
static contextTypes = {
color:PropTypes.string
} render(){
return (
<li style={{background:this.context.color}}>someword</li>
)
}
}

3. 无嵌套关系的组件传值

import {EventEmitter} from 'events';

const emitter = new EventEitter();

class A extends React.Component {
clickHandler(data,e) {
this.setState({
...
});
emitter.emit('theclick', data);
}
render() {
const data = 'xxx';
return (<div onClick={this.clickHandler.bind(this, data)} />)
}
}

App containing A and B:

import {EventEmitter} from 'events';

const emitter = new EventEitter();

class App extends React.Component {
componentDidMount() {
this.listenerForTheClick = emitter.on('theclick', (data) => {
this.setState({
propForB: data;
})
})
}
componentWillUnmount() {
emitter.remove(this.listenerForTheClick);
} render() {
return (
<B someprop={this.state.propForB} />
<A />
)
}
}

最新文章

  1. php 使用函数中遇到的坑之----list
  2. 夺命雷公狗-----React---4--props变量的传递
  3. Duilib 鼠标在某控件例如按钮上悬停后,对目标控件操作
  4. ubuntu开机遇到-您的当前网络有.local域,我们不建议这样做而且这与AVAHI网络服务探测不兼容。该服务已被禁用
  5. UITableView局部刷新
  6. VS2010 删除空行
  7. C#制作在线升级程序
  8. ionic安装
  9. null类型的字段加1
  10. Tair LDB基于Prefixkey找到如何提取一系列性能优化项目key的prefix_size
  11. Hook SSDT中NtCreateProcessEx
  12. sparksql工程小记
  13. java基础学习系列三
  14. 火狐浏览器中如何删除保存的cookie
  15. SLAM+语音机器人DIY系列:(二)ROS入门——9.熟练使用rviz
  16. redis的线程模型是什么?
  17. 运行Maven项目时出现invalid LOC header (bad signature)错误,Tomcat不能正常启动
  18. FTP登录不上 显示“找不到元素”
  19. GC 垃圾收集
  20. Linux stress CPU的测试方法

热门文章

  1. [Android]AndFix使用说明
  2. Linux.Siggen.180
  3. 关于angularJS的$watch的 一些小用法
  4. aps.net session全面介绍(生命周期,超时时间)
  5. D3.js学习笔记(四)—— 使用SVG坐标空间
  6. selenium学习笔记(selenium下载安装)
  7. oracle,查看锁表
  8. yii2:多表查询
  9. Codeforces Round #181 (Div. 2)C
  10. QT Designer 的汉化