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);