2016-09-04 5 views
1

У меня есть среагировать компонент:вызова метода на верхнем уровне реагировать компонент

var Main = React.createClass({ 
    handleFoo: function() { 
    self.setState(...); 
    }, 
    ... 
}) 

я вынести его:

var top = ReactDOM.Render(<Main />, document.getElementById("x")) 

А потом я получаю данные из внешнего источника, и я хочу взаимодействовать с компонентом верхнего уровня, так что я пробовал:

top.handleFoo() 

Но я получаю

TypeError: top.handleFoo is not a function 

Каков оптимальный способ взаимодействия с компонентом реагирования верхнего уровня извне иерархии компонентов?

+0

Я думаю, что ваш синтаксис правильный. Что вы получаете, когда вы 'console.log (верх .__ proto __)'. –

ответ

0

Что именно вы пытаетесь сделать?

Передача данных Реагировать обычно делается с помощью props:

var data = /* get your data from this external source */ 
ReactDOM.Render(<Main mydata={data} />, document.getElementById("x")) 

Здесь мы получить некоторые данные, и передать его в наш основной компонент в качестве опоры под названием mydata.

Из нашего компонента мы можем использовать реквизит мы получили так:

var Main = React.createClass({ 
    handleFoo: function() { 
    var mydata = this.props.mydata; 
    /* do what you want with data */ 
    self.setState(...); 
    }, 
    ... 
}) 

Пожалуйста, обратите внимание, что если вы хотите, чтобы обновить данные, вы передаете в Main, вы должны сделать его снова, если вы хотите чтобы вы не могли извлечь данные из компонента или управлять своим состоянием приложения, используя redux и react-redux.

Есть ли причина, по которой вы не извлекаете данные из самого компонента?

+0

Причина, по которой я не извлекаю данные из компонента, заключается в том, что я работаю с электроном, и я пытаюсь ответить на событие из собственного элемента меню. Причина, по которой я хочу вызвать метод в моем элементе реакции, заключается в том, что у меня есть элемент верхнего уровня, поддерживающий большую часть состояния на данный момент, и если я перехожу к использованию реквизита, тогда мне нужно переместить все состояние из верхнего уровня, уровня и в бесплатные функции, которые кажутся излишними. Конкретный пример использования вызывает «handleNew», который создаст новое примечание в корневых компонентах state.notes. –

+0

Я вижу. Ну, насколько я знаю (и, возможно, я ошибаюсь), реакция не дает возможности сделать это: связь с родительскими компонентами с их детьми может быть выполнена через реквизиты, общение от детей к родителям может быть выполнено с использованием родительской функции, которая передается детям через реквизит. Для чего-то еще, как правило, решение - 'redux' - большая и простая библиотека javascript для управления состоянием приложения, которую можно подключить к компонентам реакции, используя вспомогательную библиотеку' response-redux'. Я думаю, что это лучшее решение для вас. –

0

Любые изменения состояния должны быть сделаны внутри компонента. Внешние компоненты, которые взаимодействуют с классом, имеют два типа: родительский и одноранговый. Родительские компоненты могут изменять состояние путем отправки новых реквизитов. Компоненты однорангового узла должны изменять состояние с помощью событий.

Смежные вопросы