Реагировать на сброс значения потока при изменении маршрута

У меня есть простая реализация реакции и потока. я создаю новый пост с действиями и магазинами, но проблема в том, что если пользователь перейдет на другой маршрут и вернется, this.postAdded останется тем же значением.

Магазин:

class NewPostsStore {
  constructor() {
    this.title = '';
    this.body = '';
    this.postAdded = false;

    this.bindListeners({
      createPost: PostsActions.createPost
    });
  }

  createPost(res) {
    this.postAdded = res.add;
  }
} 

Действие:

class PostsActions {
  getPosts() {
    $.ajax({
      url: url
    }).then((posts) => {
      this.dispatch(posts);
    });
  }
  createPost(post) {
     $.ajax({
      type:'POST',
      data: post,
      url: url
    }).then((res) => {
      this.dispatch(res);
    });
  }
}

module.exports = Blog.createActions(PostsActions);

Компонент:

export default React.createClass({
  mixins: [addons.LinkedStateMixin],
   getInitialState() {
    return NewPostStore.getState();
  },
   onChange() {
    this.setState(NewPostStore.getState());
   },
  componentDidMount() {
    PostsActions.getPosts();
    NewPostStore.listen(this.onChange);
  },
  componentWillUnmount() {
    NewPostStore.unlisten(this.onChange);
  },

  submit(e) {
    e.preventDefault();
    PostsActions.createPost({
      title: this.state.title,
      body: this.state.body
    });
  },
  setMessage() {
    if(this.state.postAdded) {
      return <h5>success</h5>
    } else {
      return <h5>failed</h5>
    }
  },
  render() {
    return (
      <div>

        <form onSubmit={this.submit}>
           <input type="text" placeholder="Enter Title" valueLink={this.linkState('title')} />
           <input type="text" placeholder="Enter Body" valueLink={this.linkState('body')}/>
           <button>Create</button>
        </form>

         {this.setMessage()}
      </div>
    );
  }
});

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


person Community    schedule 01.05.2015    source источник


Ответы (1)


Вы можете использовать метод recycle, который сделает это за вас:

Если вы хотите сбросить определенное или все состояние хранилища обратно в исходное исходное состояние, вы должны вызвать recycle. Recycle занимает список магазинов, которые вы хотите сбросить. Если аргумент не указан, все хранилища сбрасываются.

 componentWillUnmount() {
    NewPostStore.unlisten(this.onChange);
    alt.recycle(NewPostStore);
  }
person Bazinga    schedule 02.05.2015