Доступ к хранилищу redux для получения потока данных

Я пытаюсь показать полосу загрузки, когда пользователь загружает файл PSD в зависимости от процесса загрузки.

Пример: Доступ к хранилищу redux для получения потока данных

Я отправляю действие, когда файл начинает загружаться и магазин соответственно обновляется.

  const postFormData = ({ url, data, files }) =>
    new Promise((resolve, reject) => {
    store.dispatch({ type: START_FILE_UPLOAD });

    const formData = new FormData();
    Object.keys(data).forEach(key => formData.set(key, data[key]));
    Object.keys(files)
      .map((key) => {
        const { file, filename } = files[key];
        return { key, file, filename };
      })
      .forEach(({ key, file, filename }) => formData.set(key, file, filename));

    const request = new XMLHttpRequest();

    request.open('POST', url);
    request.upload.addEventListener('progress', ({ lengthComputable, loaded, total }) => {
      if (lengthComputable) {
        const feedData = { loaded, total };
        store.dispatch({ type: START_FILE_UPLOAD, payload: feedData });
      }
    });
    request.addEventListener('load', (event) => {
      store.dispatch({ type: END_FILE_UPLOAD });
      resolve(event);
    });
    request.addEventListener('error', (event) => {
      store.dispatch({ type: END_FILE_UPLOAD });
      reject(event);
    });
    request.send(formData);
  });

Вот обновление магазина:

Доступ к хранилищу redux для получения потока данных

Но я не могу получить состояние loaded и loading из хранилища внутри компонента.

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

подписаться на магазин с помощью селектора.

Abhishek 14.10.2018 07:39

@Abhishek Не могли бы вы поделиться кодом или ссылкой?

GreyArk 14.10.2018 07:51

просто посмотрите это: `redux.js.org/api/store`

Abhishek 14.10.2018 07:54

Вы используете React-Redux?

Abhishek 14.10.2018 07:55

@Abhishek Да, я

GreyArk 14.10.2018 07:59

Простите, я ничем не могу помочь. Я в основном работал с angular redux ngRx, а не с реакцией.

Abhishek 14.10.2018 08:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
168
1

Ответы 1

Если вы используете React-Redux, используйте его метод подключения для подключения вашего компонента к магазину.

import { connect } from 'react-redux'

class Sample extends Component {
  render() {
    return (
      <div>{this.props.loading}: {this.props.loaded}</div>
    );
  }
}

const mapStateToProps = state => ({
  loading: state.creations.loading,
  loaded: state.creations.loaded,
});

export default connect(mapStateToProps)(Sample);

Я обновил свой вопрос. Внутри компонента я пробовал то же, что вы предложили, а также пробовал метод жизненного цикла, например getDerivedStateFromProps

GreyArk 14.10.2018 08:04

Если вы покажете нам компонент, в котором вы использовали connect, и расскажите, что произошло, возможно, мы сможем помочь диагностировать, почему он не работает.

Nicholas Tower 14.10.2018 08:35

Другие вопросы по теме