Когда я нажимаю кнопку, которая запускает subscribe(), я пытаюсь изменить this.state.subscribe как противоположное логическое значение того, что это такое. Я даже не управляю изменением значения this.state.subscribed гораздо меньше визуализировать другой текст при нажатии кнопки. Я попробовал replaceState и добавил функцию обратного вызова. Не совсем точно, что я должен делать в функции обратного вызова, хотя, если это то, что я делаю неправильно.React - Состояние не обновляется
SingleSubRedditList = React.createClass({
mixins: [ReactMeteorData],
getMeteorData: function(){
Meteor.subscribe('posts');
var handle = Meteor.subscribe('profiles');
return {
loading: !handle.ready(),
posts: Posts.find().fetch(),
profiles: Profiles.find({}).fetch()
};
},
getInitialState: function(){
var subscribed;
return {
subscribed: subscribed
};
},
populateButton: function(){
//fetch is cumbersome, later try and do this another way to make it faster
var profile = Profiles.find({_id: Meteor.userId()}).fetch();
if (profile.length > 0){
this.state.subscribed = profile[0].subreddits.includes(this.props.subreddit);
}
},
subscribe: function(){
this.setState({
subscribed: ! this.state.subscribed
}
);
},
renderData: function(){
return this.data.posts.map((post) => {
return <SinglePost title={post.title} content={post.content} key={post._id} id={post._id} />
});
},
render: function(){
this.populateButton()
return (
<div>
<button onClick={this.subscribe}>
<p>{this.state.subscribed ? 'Subscribed' : 'Click To Subscribe'}</p>
</button>
<p></p>
<ul>
{this.renderData()}
</ul>
</div>
);
} });
Я думаю, что установка состояния с использованием '=' была тем, что делала это. Спасибо чувак. Только один последний вопрос. Я пытаюсь заполнить кнопку HTML на основе того, что находится в коллекции Profile. Но я не могу сделать это в getInitialState, потому что данные пока недоступны, поэтому я создал функцию, которую я вызываю в методе рендеринга, который заполняет кнопку HTML, и она работает. Так как вынимая '=', это говорит мне. Невозможно обновить во время существующего перехода состояния (например, внутри 'render'). Как заполнить кнопку HTML в getInitialState или где-то еще? – ChrisWilson
Я не очень хорошо знаком с Meteor, но, как общий шаблон дизайна React, вы должны передавать внешние ресурсы в качестве реквизита для своего компонента, а не напрямую обращаться к ним. Поскольку реакция будет повторно отображаться всякий раз, когда вы передаете новый реквизит на компонент, вы можете быть уверены, что правильно инициализируете состояние, когда данные будут доступны. – gravityplanx