Я думаю, что мне может быть что-то не так концептуально о том, как работают React и Reflux.Как я могу очистить состояние в React.js?
Если я установил состояние объекта («проект»), когда он отображает экран (с его существующими свойствами), как я могу использовать это же состояние (и хранилище) для создания нового проекта?
Это код с моей точки зрения проекта:
componentWillMount: function() {
// We need to get the project based on projectID.
var projectID = this.props.params.projectID;
if (projectID) {
ProjectActions.getProject(projectID);
}
},
А вот какой-то код от моего магазина проекта:
data: {},
listenables: ProjectActions,
getInitialState: function() {
return this.data;
},
onGetProject: function (projectID) {
// Get the project based on projectID.
$.ajax({
type: 'GET',
url: '/api/projects/getProject/' + projectID
}).done(function(response){
ProjectStore.getProjectSuccessful(response);
}).error(function(error){
alert('GET projects failed.');
});
},
getProjectSuccessful: function(response) {
for (var prop in response) {
if (response.hasOwnProperty(prop)) {
this.data[prop] = response[prop];
}
}
this.trigger(this.data);
},
Тогда, скажем, я нажимаю «новый проект», я использую это код:
mixins: [Reflux.connect(ProjectStore), Router.Navigation],
getInitialState: function() {
return {
// Project properties:
format: '',
title: '',
productionCompany: ''
};
},
то, что я обнаружил, что если я удалить «getInitialState» от моего магазина, что это не проблема, когда Я иду, чтобы создать новый проект. Однако, как только я это сделаю, я больше не могу редактировать свой существующий проект, потому что ничего не придает государству (я могу использовать prop для просмотра, но этого недостаточно).
Если я сохраню «getInitialState», я получаю ошибка:
Uncaught Error: Invariant Violation: mergeIntoWithNoDuplicateKeys(): Tried to merge two objects with the same key: `format`. This conflict may be due to a mixin; in particular, this may be caused by two getInitialState() or getDefaultProps() methods returning objects with clashing keys.
Нужен ли мне «NewProjectStore», у которого есть действие для создания? Я подумал, что магазин может обрабатывать создание, получение, обновление и т. Д.
Я что-то упустил?
У вас есть 'projects' магазин? Массив всех проектов? – azium
Да У меня есть магазин 'Projects' и магазин' Project'. Сначала я просто имел «Проекты», но обнаружил, что было сложно использовать состояние в одном проекте внутри него, потому что свойства будут «this.state.project. [Property]», и React не играл хорошо с этим , – Rail24