摘要:組件間通信父組件中放入子組件將自身屬性與方法傳給子組件子組件即父組件的一部分所以只要父組件重新子組件也必定重新子組件接收父組件傳過來的屬性與方法調用父組件方法為父組件中的父組件子組件調用子組件自己的方法調用父組件方法父組件向子組件通信數
組件間通信
1.父組件中放入子組件,將自身屬性與方法傳給子組件,子組件即父組件的一部分,所以只要父組件重新render,子組件也必定重新render.
2.子組件this.props接收父組件傳過來的屬性與方法,this.props.add調用父組件方法,this.setState為父組件中的state.
import React, { Component } from "react"; import { render } from "react-dom"; import Example from "../components/Example.js"; class App extends Component { constructor(props) { super(props); this.state = { a: 1 }; } add = () => { this.setState({ a: this.state.a + 1 }); } render() { return (); } } render({ this.state.a }, document.getElementById("root"));
import React, { Component } from "react"; import { render } from "react-dom"; class Example extends Component { constructor(props) { super(props); this.state = { a: 10 }; } componentWillReceiveProps(nextProps) { this.setState({ a: nextProps.a }); } add = () => { this.setState({ a: this.state.a + 1 }); } render() { return (父組件向子組件通信); } } export default Example;父組件: { this.props.a }
子組件: { this.state.a }
React數據流動是單向的,父組件向子組件的通信也是最常見的方式.
父組件通過props向子組件傳遞需要的信息.
import React, { Component } from "react"; import { render } from "react-dom"; import ListTitle from "../components/ListTitle.js"; import ListItem from "../components/listItem.js"; class List extends Component { render() { let title = "父組件向子組件通信"; let list = [1, 2, 3, 4, 5]; return (子組件向父組件通信); } } render({ list.map((item, index) => { return (
) }) } , document.getElementById("root"));
setState一般與回調函數均會成對出現,這是因為回調函數即是轉換內部狀態時的函數傳統.
子組件使用this.props.fun調用父組件的函數,函數中一般會setState,觸發父組件render,同時子組件也會render
onItemChange = (item) => { const { list } = this.state; this.setState({ list: list.map((prevItem) => { return { text: prevItem.text, checked: prevItem.text === item.text ? !prevItem.checked : prevItem.checked } }) }); } onTitleChange = () => { this.setState({ title: "利用回掉函數,子組件向父組件通信" }) }跨級組件通信
當需要讓子組件跨級訪問信息時,我們可以像之前說的方法那樣向更高級別的組件層層傳遞props.
在React中,我們可以使用context來實現跨級父子組件間的通信.
我們并沒有給ListItem傳遞props,而是在父組件定義了ChildContext,這樣從這一層開始的子組件都可以拿到定義的context,例如這里的txt.
不過React官方并不建議大量使用context,因為它可以減少逐層傳遞,但當組件結構復雜時,我們并不知道context是從哪里傳過來的.
Context就像一個全局變量一樣,而全局變量正是導致應用走向混亂的罪魁禍首之一,給組件帶來了外部依賴的副作用.
使用context比較好的場景是真正意義上的全局信息且不會更改,例如界面主題,用戶信息等.
1.父組件
static childContextTypes = { txt: React.PropTypes.string }; getChildContext() { return { txt: "aaaa" }; }
2.子組件
static contextTypes = {
txt: React.PropTypes.string
};
span: { this.context.txt }
沒有嵌套關系的組件通信
1.沒有嵌套關系的,那只能通過可以影響全局的一些機制去考慮,自定義事件機制不失為一種上佳的方法.
2.在componentDidMount事件中,如果組件完成掛載,再訂閱事件.
當組件卸載的時候,在componentWillUnmount事件中取消事件的訂閱.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84297.html
摘要:父組件聲明自己支持父組件提供一個函數,用來返回相應的對象子組件聲明自己需要使用我胡漢三又回來了點擊我如果是父組件向子組件單向通信,可以使用變量,如果子組件想向父組件通信,同樣可以由父組件提供一個回調函數,供子組件調用,回傳參數。 在使用 React 的過程中,不可避免的需要組件間進行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 跨級組件之間...
摘要:在使用的過程中,不可避免的需要組件間進行消息傳遞通信,組件間通信大體有下面幾種情況父組件向子組件通信子組件向父組件通信非嵌套組件間通信跨級組件之間通信父組件向子組件通信父組件通過向子組件傳遞,子組件得到后進行相應的處理。 在使用 React 的過程中,不可避免的需要組件間進行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 非嵌套組件間通信 跨...
摘要:在使用的過程中,不可避免的需要組件間進行消息傳遞通信,組件間通信大體有下面幾種情況父組件向子組件通信子組件向父組件通信非嵌套組件間通信跨級組件之間通信父組件向子組件通信父組件通過向子組件傳遞,子組件得到后進行相應的處理。 在使用 React 的過程中,不可避免的需要組件間進行消息傳遞(通信),組件間通信大體有下面幾種情況: 父組件向子組件通信 子組件向父組件通信 非嵌套組件間通信 跨...
摘要:同時吸取了社區大量優秀思想,進行歸納比對。有興趣的讀者可以點擊下面的鏈接購買,再次感謝各位的支持與鼓勵懇請各位批評指正京東當當原文網址 在React中最小的邏輯單元是組件,組件之間如果有耦合關系就會進行通信,本文將會介紹React中的組件通信的不同方式 通過歸納范,可以將任意組件間的通信歸類為四種類型的組件間通信,分別是父子組件,爺孫組件,兄弟組件和任意組件,需要注意的是前三個也可以算...
摘要:本身提供哪幾種通信方式首先靈感源于,支持雙向綁定,本質還是單向數據流。跟一樣,組件間最基本的數據流是通過向子組件傳遞數據。但是在卻很少使用,因為組件可以自定義事件,即后面的組件間通信方式其實就是訂閱發布模式。 例子是在 jsrun.net 平臺編寫,不支持移動端平臺,所以本文建議在 PC 端進行閱讀。 Vue 是數據驅動的視圖框架,那么組件間的數據通信是必然的事情,那么組件間如何進行數...
閱讀 3299·2021-09-30 09:54
閱讀 3782·2021-09-22 15:01
閱讀 3105·2021-08-27 16:19
閱讀 2572·2019-08-29 18:39
閱讀 2145·2019-08-29 14:09
閱讀 622·2019-08-26 10:23
閱讀 1336·2019-08-23 12:01
閱讀 1862·2019-08-22 13:57