React组件传值方式总结
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 />
)
}
}
React组件传值方式总结的更多相关文章
- 深入理解React组件传值(组合和继承)
在文章之前,先把这句话读三遍 Props 和组合为你提供了清晰而安全地定制组件外观和行为的灵活方式.注意:组件可以接受任意 props,包括基本数据类型,React 元素以及函数. 来源于React中 ...
- vue中组件传值方式汇总
在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA中的组件间传值. 一.路由传值 路由对象如下图所示: 在跳转页面的时候,在js代码中的操作如下,在标签中使用<router-li ...
- 编写高性能React组件-传值篇
很多人在写React组件的时候没有太在意React组件的性能,使得React做了很多不必要的render,现在我就说说该怎么来编写搞性能的React组件. 首先我们来看一下下面两个组件 import ...
- react native 传值方式之 :子组件通过调用 其父组件传来的方法 传值回其父组件
- React组件传值
React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数据流,数据主要从父 ...
- React 组件传值 父传递儿子
10===> 传递参数 import React from "react" //一定要导入React // 函数类型去创建组件 export function Web1(pr ...
- vue ts ,vue使用typescript,三种组件传值方式
参考链接:https://juejin.im/post/5c55156f6fb9a049ef270541
- vue组件之间的传值方式
一.父组件向子组件传值方式 1.1父组件向子组件传数据方式 <!DOCTYPE html> <html lang="en"> <head> &l ...
- React组件:拖拽布局Dragact v0.1.6 发布
仓库地址:Dragact爽滑的拖拽组件 大家好,新年已经过去,大家又投入了繁忙的工作当中,由于我在国外,因此压根儿没有休息... 少说废话,上周一周的时间里,我陆陆续续的为Dragact组件进行了一系 ...
随机推荐
- spring注解方式注入bean
用注解的方式注入bean,spring的配置文件也要增加一些约束和导入注解所在的包 applicationContext.xml <?xml version="1.0" en ...
- .net 数据脱敏代码实现
方案一: DTO中处理: private string idNumber; /// <summary> /// 身份证号码 /// </summary> [Column(&qu ...
- hdu 5719 Arrange 贪心
Arrange Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Proble ...
- mysql desc esc 基本命令总结
asc 按升序排列desc 按降序排列 下列语句部分是Mssql语句,不可以在access中使用. SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操 ...
- 一种根据value解释成枚举的有效方法
有时候需要根据实际情况将某个值解释成一个枚举,而不是根据枚举的名称.如有时0是枚举Gender.MALE的值,1是枚举Gender.FEMALE的值:有时0.1又可以是另一个枚举的值,比如0表示Cer ...
- pyCharm上解决安装不上pandas库问题
最近在PyCharm上安装pandas库的时候,总是安装不上,提示好像是pip除了错误.我使用的是python .4版本.最后判断应该是自己pip版本应该太旧了,最后再cmd更新了pip之后就行了.如 ...
- activity启动模式之singleInstance
activity启动模式之singleInstance 一.简介 Log.d("C2", getTaskId()+"");里面的getTaskId()可以获取a ...
- poj2478欧拉函数
打表欧拉函数,求2到n的欧拉函数和 #include<map> #include<set> #include<cmath> #include<queue> ...
- requirejs打包项目
例子: https://github.com/AinneShen/requirejsExample 用requirejs为js和css添加版本,项目共用同一个config
- C#的静态构造函数.cctor
静态构造函数操作的是类(而非其实例的)成员.静态构造函数(.cctor)的一些特点:1. 声明和定义形式上,只能有static一个修饰符,不能有任何修饰符和返回值(也不能有void).2. 不能被显示 ...