Я новый, чтобы реагировать. Я прошел через пару учебники, и создал небольшую страницу, которая имеет 4 компонента (? React классы, что является предпочтительным термином я буду называть их компоненты в этой должности):React.js Парадигма потока данных - как полезны data.props, state и JSX?
компонентов Разбивка
- родительский компонент «App», который включает в себя и управляет другими компонентами
- компонент «Form», который позволяет пользователю взаимодействовать со страницей
- качестве компонента «Строка Вид», который отображает входные данные из формы в виде текста
- компонент «Визуальный вид» (я знаю, плохое имя ...), который интерпретирует представление строки и выполняет действия по настройке визуального.
Dataflow
Связь этих компонентов с использованием состояний и реквизита выглядит следующим образом:
- Форма OnChange обработчики, которые передают новое состояние в App
- Приложение переводит данные состояния в строковый вид
- String View обновляет и передает обновленное состояние в приложение
- Приложение переводит новые данные состояния в визуальный вид
- Наконец, Visual View теперь обновляется на основе нового состояния.
Пример кода
var App = React.createClass({
handleFormChange: function(formData) {
this.setState({formData:formData});
},
handleStringChange: function(stringData) {
this.setState({stringData:stringData});
},
render: function() {
return (
<div className="app">
<FormView onFormChange={this.handleFormChange}/>
<StringView formData={this.state.formData} onStringChange={this.handleStringChange}/>
<VisualView stringData={this.state.stringData}/>
</div>
);
}
});
var FormView = React.createClass({
handleFormChange: function(e) {
this.props.onFormChange(e.target.value);
}
render: function() {
return(
<div className="formView">
<select onChange={this.handleFormChange}>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
</div>
);
}
});
var StringView = React.createClass({
componentDidUpdate: function() {
this.props.onStringChange({newString:'newStringState'});
},
render: function() {
this.props.formData;
// process formData and update state
return (
<div className="stringView">
{this.props.formData}
</div>
);
}
});
var VisualView = React.createClass({
render: function() {
var selection = this.props.stringData,
output = '';
if (selection === 1) {
output = 'Hooray, 1!';
} else {
output = 'Yes! 2!';
}
return (
<div className="stringView">
{output}
</div>
);
}
});
Вопросы
Вот где я получаю на мой актуальный вопрос (ы):
- Является ли это правильной парадигмой потока данных, которую React пытается применить (компоненты говорят только с родителями, а не с братьями и сестрами)?
- По сравнению с тем, как я написал бы это только в обычном JavaScript, это кажется ужасно ограниченным. Мне не хватает большой картины? Является ли эта парадигма потока данных, предназначенной для предотвращения будущих проблем (если да, какие из них не могут быть решены с помощью дисциплинированного обычного JavaScript?), Или есть ли какая-то другая цель, которую мне не хватает?
- Я получаю много имен функций повторения (handleFormChange, например, используется в приложении и виде формы), есть ли хороший способ сделать их различимыми? Или, повторяются ли названия функций по желательным компонентам?
- Когда компоненты фактически строятся, материал JSX переводится в реальный JavaScript. Есть ли преимущество в использовании JSX? Имеет ли преимущество в написании компонентов в уже скомпилированном JavaScript?
Благодаря передовой, я знаю, что был вид стены текста. Я просто хочу удостовериться, что я правильно понял свою основу.
Во-первых, еще раз спасибо за чтение моего гигантского поста. Кроме того, спасибо, что ответили на каждый из моих вопросов очень четко! Я понимаю, что большинство из того, что я просил, основано на мнениях, но я думаю, что вы получили достоверные статьи, которые я очень рад прочитать (и тогда я, вероятно, вернусь к вам, если у меня возникнут вопросы)! –
@JamesCollier добро пожаловать! И жаль, что мой гигантский ответ хахаха. В React есть много интересных вещей, и я был бы рад ответить на ваши вопросы! :) –