react父子、子父、兄弟通訊
父子通訊
- 父元件定義一個狀態資料
- 呼叫子元件的時候,將資料通過屬性的方式傳給子元件
- 子元件通過this.props的方式接收
- 但是不能對傳遞過來的屬性進行修改
父元件
export default class Todos extends Component {
state = {
list:["a","b","c"]
}
render() {
let {list} = this.state;
return (
<div>
<List list={list}/>
</div>
)
}
}
子元件
export default class List extends Component {
render() {
let {list} = this.props;
return (
<ul>
{
list.map((item,index)=>{
return <li key={index}>{item}</li>
})
}
</ul>
)
}
}
子父通訊
- 父元件需要定義一個狀態
- 父元件需要定義一個修改自身狀態的方法
- 在呼叫子元件的時候通過屬性將方法傳給子元件
- 子元件通過this.props.xxx觸發父元件的修改狀態的方法
父元件
export default class Todos extends Component {
state = {
list:["a","b","c"],
}
add = value =>{
this.setState({
list:[...this.state.list,value]
})
}
render() {
let {list} = this.state;
return (
<div>
<Input add={this.add}/>
<List list={list}/>
</div>
)
}
}
子元件
export default class Input extends Component {
handleKeyUp = e => {
if(e.keyCode === 13){
this.props.add(e.target.value)
e.target.value = ""
}
}
render() {
return (
<input onKeyUp={this.handleKeyUp}/>
)
}
}
兄弟元件
- 通過EventHub的機制.on繫結事件,通過trigger進行事件觸發
- 在兄弟一元件中建立更改自身狀態的方法
- 在componentDidMunt鉤子函式中通過EventHub.on(‘繫結第事件’,觸發的方法)監聽繫結事件
- 在兄弟二組建中通過EventHub.trigger(“觸發的繫結事件”,兄弟一更改狀態方法的形參)觸發繫結事件(訂閱過程)
- 【注】兄弟事件都需要引入event_hub.js檔案
兄元件
export default class One extends Component {
state = {
color:"red"
}
setColor = (color)=>{
this.setState({
color
})
}
componentDidMount(){
//需要監聽事件
EventHub.on("change",this.setColor)
}
render() {
return (
<div>
<p style={{background:this.state.color}}>One</p>
</div>
)
}
}
弟元件
export default class Two extends Component {
randomHexColor() { //隨機生成十六進位制顏色
return '#' + ('00000' + (Math.random() * 0x1000000 << 0).toString(16)).substr(-6);
}
changeColor = ()=>{
//需要讓One元件的change事件進行觸發(訂閱過程)
EventHub.trigger("change",this.randomHexColor())
}
render() {
return (
<div>
Two -- <button onClick={this.changeColor}>點選變色</button>
</div>
)
}
}
加粗樣式event_hub.js檔案
let callbackLists = {}
let eventHub = {
trigger(eventName, data) {
let callbackList = callbackLists[eventName]
if (!callbackList) {
return
}
for (let i = 0; i < callbackList.length; i++) {
callbackList[i](data)
}
},
on(eventName, callback) {
if (!callbackLists[eventName]) {
callbackLists[eventName] = [] // {change:[callback,callback2]}
}
callbackLists[eventName].push(callback)
}
}
export default eventHub
相關文章
- vue2.0父子、兄弟元件通訊,$emit使用Vue元件MIT
- react父子元件,兄弟元件,爺爺到孫子元件筆記React元件筆記
- 我學react之父子元件通訊React元件
- 會vue,學習react元件父子通訊VueReact元件
- Vue.js子元件向父元件通訊Vue.js元件
- 2.Vue子元件給父元件通訊Vue元件
- vue 父子元件通訊Vue元件
- Vue子元件與父元件之間的通訊Vue元件
- Vue 父子元件的通訊Vue元件
- vue--select父子元件通訊Vue元件
- vuejs如何設定父子通訊VueJS
- vue---元件間傳遞訊息(父子傳遞訊息,兄弟傳遞訊息)Vue元件
- React 父元件如何主動“聯絡”子元件React元件
- Vue父子元件通訊小總結Vue元件
- Vue中父子元件通訊——元件todolistVue元件
- vue父子元件通訊高階用法Vue元件
- Vue2.0父子元件間通訊Vue元件
- VUE父傳子,子傳父Vue
- vue中兄弟之間元件通訊Vue元件
- react通訊React
- 總結Vue第二天:自定義子元件、父子元件通訊、插槽Vue元件
- prop父子元件通訊,動靜態prop元件
- iframe父子頁面通訊解決方案
- 附例項!實現iframe父窗體與子窗體的通訊
- Unity通過子物件獲取父物件例子Unity物件
- 【React】元件通訊 - 跨層通訊React元件
- React講解 - 父元件呼叫子元件內容【更新中】React元件
- React元件通訊React元件
- React 元件通訊React元件
- React: 關於React通訊方式React
- react元件通訊通識篇React元件
- Vue.js 父子元件通訊的1212種方式Vue.js元件
- 3.Vue非父子元件之間的通訊Vue元件
- React 《元件間通訊》React元件
- 父往子傳,子往父傳,以及平行傳值
- 元件(子傳父)元件
- 探討父元件和兄弟元件的生命週期元件
- react之組建通訊React