все еще изучает Flux, у меня проблемы с некоторой логикой о магазине. Предположим, я создал компонент, одну кнопку, управляющую голосованием, например, переключатель «Да»/«Нет».Flux, как правильно использовать компоненты?
Итак, у меня есть свой голос, который управляет голосованием, которое использует диспетчер для вызова функции Store, которая изменяет состояние votedByViewer.
Все это весело, и все это правильно ... если у меня есть одна кнопка. Но если у меня есть мультипликаторы, они имеют один и тот же магазин, поэтому повторное рендеринг происходит во всех кратных компонентах.
Это мои первые ЯШ:
// Parse all DIV for React management
$("#be-content [id*=like]").each(function (index) {
var div_id = $(this).attr("id");
// Render the VoteButton
ReactDOM.render(
<VoteButton />,
document.getElementById(div_id)
)
});
Каждый VoteButton правильно отображаются в странице, но каждый переключатель изменяет состояние всех кнопок. Это мой VoteButton:
var voteStore = require('../stores/voteStore') ;
var voteActions = require('../actions/voteActions');
var VoteButton = React.createClass({
getInitialState: function() {
return {
voted: voteStore.getVote()
}
},
componentDidMount: function() {
voteStore.addVoteListener(this._onChange);
},
componentWillUnmount: function() {
voteStore.removeVoteListener(this._onChange);
},
handleVote: function() {
this.state.voted ? voteActions.unvote() : voteActions.vote()
},
_onChange: function() {
this.setState({
voted: voteStore.getVote()
})
},
render: function() {
return (
<div className="link">
<button onClick={this.handleVote}>{this.state.voted? 'YES':'NO'}</button>
</div>
)
}
});
module.exports = VoteButton;
Любая идея о том, как его решить? Может быть, мне нужно использовать Контейнеры? Спасибо
Итак, мой магазин, который теперь похож на этот var _voteStore = {votedByViewer: false}, должен быть преобразован в массив пары значений ключа, правильно? С функциональностью добавить новый элемент в массив, используемый во время инициализации магазина. Так ли это? – Longa
да, это все. Он не должен быть массивом, объект тоже хорош, зависит от вас и от того, как вы хотите что-то делать, но у вас есть смысл, сохранение и идентификация, добавление новых идентификаторов кнопок в ваш магазин, привязка кнопки. –
_voteStore = {button1: false, button2: true ...} например :) –