2016-04-18 99 views
1

我有3個組件。一個父組件和兩個子組件(A,B)。第一個子組件A有一個觸發父組件函數的按鈕。父母有一個開關,可以顯示子組件B或不顯示子組件B.如果子組件B應該可見,它就會被安裝。 從父母調用的函數子A現在在組件B中執行一個函數。reactjs通過組件之間的溝通

我試圖通過在子組件B上提供ref屬性來實現它。但是,因爲它在init上沒有掛載是因爲很好的原因this.refs是空的。 如何在不安裝所有可能的子組件B(或更晚的C,D,E)的情況下實現此目標。

重要的是,子A中的onClick事件總是觸發引用的事件。

這裏是一個快速草案:enter image description here

任何人可以給我一個提示,以解決我的邏輯問題?

+0

我認爲每個孩子(b-d)的'componentWillReceiveProps'是投資的地方;忽略隱藏的人,在所示的人上做東西。你也可以用諸如EventEmmiters或者redux之類的東西「作弊」。 – dandavis

回答

1

以下行:

從父調用的函數孩子現在執行 組件B.功能

奇怪/和帶有禁區反應:父不能(不應該)直接調用子組件內的函數。
父母可以(應該)將支柱傳遞給孩子,然後孩子可以啓動自己的功能。

如果我理解正確的話,你要執行小孩B內部的功能被點擊)成分A時執行和B)成分B裝着

你可以做到這一點,如下所示:

  • 在父項內添加一個狀態參數,例如this.setState(childAClicked: true),很可能在父級內的回調函數內,由子級A調用。
  • 將此參數傳遞給子級B,例如, <ChildB clickedA = {this.state.childAClicked} />
  • 小孩B內,加一個componentDidMount()生命週期的方法,檢查this.props.clickedA,如果屬實,執行小孩B內部的功能
  • ,如果你想更新的孩子B之後還執行的功能,裏面添加相同的檢查一個componentDidUpdate()生命週期方法

如果你想要執行的函數只內的組件之一B,C,d,基於一些其它的參數,你加這個參數,以及對你父母的狀態,並將它傳遞給其他B,C和D組件。

+0

哦,我的上帝,你是如此的正確......我看不到樹林。多謝 – bdart