Проблемы с магазином MobX при использовании Material-table - PullRequest
0 голосов
/ 09 февраля 2020

Мне нужно найти решение, используя MobX, React и Material-table, как постоянно сохранять данные каждый раз, когда я делаю изменения (обновление строки, добавление строки и удаление строки), используя хранилище Mobx с декоратором @action в хранилище. Проблема в том, что каждый раз, когда я добавляю новые данные и обновляю sh страницу, новые данные исчезают.

У кого-нибудь есть решение, как реализовать это решение в приведенном ниже коде?

Компонент: TableMake. js

import React from 'react';
import MaterialTable from 'material-table';
import '../layouts/Tables.css';
import { inject, observer } from 'mobx-react';
import VehicleMakesStore from "../stores/VehicleMakes";

export default inject('VehicleMakes')(observer(function TableMake(props) {

    console.log(props);
    const store = new VehicleMakesStore();
    console.log(JSON.stringify(store.allVehicleMakes));

    const [state, setState] = React.useState({  
        columns: [
            { title: 'ID', field: 'id' },
            { title: 'Name', field: 'name' },
            { title: 'Production', field: 'year' },
            { title: 'ABRV', field: 'abrv' },
        ],
        data: store.allVehicleMakes

    });

    return (

        <MaterialTable      

            title="Vehicles Table"
            columns={state.columns}
            data={state.data}
            editable={{

                onRowAdd: newData =>
                    new Promise(resolve => {
                        setTimeout(() => {
                            resolve();
                            setState(prevState => {
                                const data = [...prevState.data];
                                data.push(newData);           
                                return { ...prevState, data };
                                    });                                      
                        }, 600);
                    }),

                onRowUpdate: (newData, oldData) =>
                    new Promise(resolve => {
                        setTimeout(() => {
                            resolve();
                            if (oldData) {
                                setState(prevState => {
                                    const data = [...prevState.data];
                                    data[data.indexOf(oldData)] = newData;
                                    return { ...prevState, data };
                                });
                            }
                        }, 600);
                    }),

                onRowDelete: oldData =>
                    new Promise(resolve => {
                        setTimeout(() => {
                            resolve();
                            setState(prevState => {
                                const data = [...prevState.data];
                                data.splice(data.indexOf(oldData), 1);
                                return { ...prevState, data };
                            });
                        }, 600);
                    }),
            }
            }
        />
    );
    }          
)          
);

Магазин: VehicleMakes. js

import { observable } from 'mobx';
import { Component } from "react";


class VehicleMakes extends Component {


@observable allVehicleMakes = [

        { name: 'Opel Ampera', id: '03246', abrv: 'OP - AM', year: 2011 },
        { name: 'Opel Tigra', id: '03244', abrv: 'OP - TI', year: 2000 },
        { name: 'Opel Karl', id: '03224', abrv: 'OP - KA', year: 2015 },
        { name: 'Mazda Challenge', id: '02244', abrv: 'MA - CH', year: 2017 },
        { name: 'Mazda3 Sedan', id: '01244', abrv: 'MA - SE', year: 2018 },
        { name: 'Ford Mondeo', id: '74565', abrv: 'FO - MO', year: 2017 },
    ]; 

} 
export default VehicleMakes;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...