2016-09-24 9 views
1

Я создаю компонент ReactJS с неизвестным количеством детей и предков, и когда определенное событие происходит на одном из предков, я должен знать его родительский компонент , мой первый подход заключается в том, чтобы использовать redux и отправлять дочерний компонент с помощью действия reducex, а затем основные родительские компоненты будут предупреждены и будут проверять, был ли отправленный Componentnt одним из его предков. , но может ли родительский компонент jJ знать каким-то образом, если другой компонент является одним из его предков?проверить, является ли компонент дочерним или предком другого компонента ReactJS

+0

единственный способ, которым я могу видеть это сделать с помощью js/DOMelemt 'содержит' с React.findDOMelement. https://jsfiddle.net/shaibam/d0q5mwc4/33/ –

ответ

1

Родитель может определить функцию в контексте, дети могут затем вызвать эту функцию:

Родитель:

childContextTypes: { 
    notifyChange: React.PropTypes.func.isRequired 
}, 

getChildContext() { 
    return { 
     notifyChange: (...args) => this.handleChange(...args) 
    } 
}, 

handleChange (arg) { 
    console.log(arg + ' bar!') 
}, 

Ребенок:

contextTypes: { 
    notifyChange: React.PropTypes.func 
}, 

handleSomething() { 
    const { notifyChange } = this.context 

    // safety check if component is used elsewhere 
    if (notifyChange) notifyChange('foo!') 
}, 
+0

Большое спасибо, я обновил filddle, чтобы включить ваше решение. https://jsfiddle.net/shaibam/d0q5mwc4/35/ –