2015-05-01 3 views
2

У меня есть простая реализация реакции и потока. Я создаю новую запись с действиями и хранилищами, но проблема в том, что если пользователь перейдет на другой маршрут и вернет 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> 
    ); 
    } 
}); 

Как я могу сбросить состояние, когда перейти на другую точку зрения?

ответ

3

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

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

componentWillUnmount() { 
    NewPostStore.unlisten(this.onChange); 
    alt.recycle(NewPostStore); 
    } 
Смежные вопросы