Я нахожусь в точке своего приложения, у меня есть немного тупик, и я не совсем уверен, что делать.React - мне нужен Flux/Redux в этот момент? (связь между компонентами)
В принципе, у меня есть компонент структуры, как это:
Layout
FilePage
FileDrop
BackgroundActivity
UploadQueue
FileUpload
Так на каждой странице, то BackgroundActivity
компонент есть, который будет показывать файлы в настоящее время загружены. Каждый FileUpload
- это в основном измеритель хода и имя файла.
Проблема здесь, когда пользователь перетаскивает файл на FileDrop
, мне нужно что-то отправить данные файла UploadQueue
создать новую FileUpload
, например:
UploadQueue = React.createClass({
propTypes: {
fileList: React.PropTypes.any.isRequired
},
statusChange(status) {
debugMode && console.info('[UploadQueue] Status change! %o', status);
},
render() {
let files = [];
// Convert to a true array
for (let i = 0; i < this.props.fileList.length; ++i) {
files = files.concat(this.props.fileList[i]);
}
return (
<div>
{files.map(file => {
return <FileUpload key={file.name}
name={file.name}
statusChange={this.statusChange} />
})}
</div>
)
}
});
Кажется, что я должен был бы передать функцию обратного вызова от Layout
до FilePage
, вплоть до FileDrop
, так что FileDrop
может передать информацию о файле обратно вверх Layout
, который затем отправить его вниз BackgroundActivity
перейти к UploadQueue
. Это похоже на грязный способ соединить внуков.
Я в точке, где мне нужен Flux или Redux? Я знаю, что эти рамки требуют уменьшить сложность, но, глядя на примеры Redux, кажется, просто добавить больше сложности. Или передаются функции на нескольких уровнях, как это делается в React?
Вы можно посмотреть на странице https://github.com/reflux/refluxjs. Я нахожу, что это добавляет ясности в обработку данных. Пример использования рефлюкса - https://github.com/calitek/ReactPatterns. Посмотрите на React.13/ReFluxWebSocket. –
Я бы рекомендовал пойти с redux над другими вариантами, только что изменившись с рефлюкса, немного сложнее изучить, но стоит того, и даже facebook теперь принял его внутренне – Tom