Могу ли я обновить state.global.example в Redux из render () в ReactJs? - PullRequest
0 голосов
/ 05 июня 2019

dev-brothers!

У меня есть метод, который обновляет коллекцию MongoDB, которая уже доступна в Redux на FE.

Проблема в том, что мой метод update удаляет ранее агрегированные объекты/ массивы в этой коллекции (как я пытаюсь использовать глобальные axios в FE).Ошибка возникает, когда я пытаюсь извлечь некоторые данные из Redux, который был только что очищен.

Когда я обновляю страницу, FE снова запрашивает BE для сбора, и старые исправленные агрегаты снова присоединяются к обновленным данным иснова запакован в Redux state.global.

ВОПРОС: Могу ли я обновить Redux (state.global.example) в методе после вызова вызова для обновления коллекции?


================ РЕШЕНИЕ =================

1.Работает, но не лучше: Я написал callback () для обновления коллекции в родительском компоненте, который отображается на обновленную коллекцию, расположенную в Redux.

2.Работает лучше: Я очистил бэкэнд-агрегаты - все одинаковых поисков, раскручиваний и сортировок выполняются в одной и той же функции;Очень важно - BE отвечает только одним обновленным объектом, а не всей коллекцией, как в первом решении.

================ РЕШЕНИЕ=================

import React from 'react';
import { connect } from 'react-redux';
import { upds } from "../../../actions/global/global";
import { Button } from 'reactstrap';

class myProj extends React.Component {

  render () {

    const { mycollection } = this.props

    var valueToUpdate = "My new value";

    var myUpdate = (valueToUpdate) => {
      var beData = Object.assign({}, mycollection, { key_to_update: valueToUpdate });
      delete beData.aggregate1;
      delete beData.aggregate2;
      delete beData.aggregate3;
      this.props.onUpds("mycollection", beData);
    };

    return (

      <React.Fragment>

        <Button onClick={() => this.myUpdate("my new value")}><p>UPDATE</p></Button>

        {myCollection}

      </React.Fragment>
    );
  };
};

const mapStateToProps = state => {
  return {
    mycollection: state.global.mycollection
  }
};

const mapDispatchToProps = dispatch => {
  return {
    onUpds: (objName, obj, cbk) => dispatch(upds(objName, obj, cbk))
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(myProj);
...