Глобальная переменная продолжительность жизни в JavaScript - PullRequest
1 голос
/ 16 мая 2019

Я нахожусь в процессе изучения React (и Javascript), и работа над моделью данных является частью моей добровольной опеки. С первой попытки я создал базовый объект javascript, который будет использоваться с геттером и сеттером следующим образом:

story_store.js

var story = {
  id:"",
  title:""
}

module.exports = {
    getStory: function() {
        return story
    }

    setStory: function(id, title) {
        story.id = id;
        story.title = title;
    }
}

Затем я установил бы объект во время сетевого вызова и мог бы получить к нему доступ (получить), пока приложение не завершится. Эта версия работала как ожидалось.

Для следующей версии я поместил свою модель и методы получения / установки в отдельные файлы и использовал массив для хранения объектов модели.

story_model.js

export function Story(id, title, text='') {
    let story = {}
    story.id = id;
    story.title = title;
    story.text = text;

    return story
}

story_store.js

var stories = [];

module.exports = {
    getStory: function(id) {
        return stories.find(x => x.id === id);
    },
    setStories: function(stories) {
        stories.forEach(function(story) {
            stories.push(story);
        });
    }
}

На этот раз установщик работал, как и ожидалось, однако, когда я позже попытался получить доступ к массиву, он был пуст. Я предполагаю, что проблема связана с тем, как я создаю объекты, прежде чем помещать их в массив, но мне это кажется странным. Есть идеи?

1 Ответ

2 голосов
/ 16 мая 2019

Ваша проблема в том, что сеттер устанавливает значение параметра stories - JavaScript работает изнутри, чтобы найти переменную, и, как только он находит ее, он останавливается.Вам нужно изменить имя параметра в setStories, чтобы он выглядел как глобальный массив stories:

setStories: function(storyArray) {
    storyArray.forEach(function(story) {
        stories.push(story);
    });
}

Также обратите внимание, что вы можете использовать concat, чтобы сделать то же самое:

setStories: function(storyArray) {
    stories.concat(storyArray);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...