@andrey_chirkin

При изменении данных в хранилище, значение value не перерендеривается в текстовом поле?

Здравствуйте! Я использую библиотеку mobX для создания глобального хранилища данных dataTable. Эти данные используются в таблице. Данные в строке можно отредактировать с помощью формы. Там есть текстовые поля. Я не могу понять почему при изменении данных в стейте dataTable значение value не меняется.
import {observable, action, makeAutoObservable} from "mobx"

class TechStore {

    dataTable = [
        {
            numberOperation: '010',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 1235,
            area: 20,
            tsht: 8,
            tpz: 0,
            test: 24,
            OO: true,
            OTK: true,
            PZ: false,
            KPS: false
        },
        {
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: true,
            OTK: false,
            PZ: true,
            KPS: false
        },
        {
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: false,
            OTK: false,
            PZ: true,
            KPS: false
        },
        {
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: true,
            OTK: false,
            PZ: true,
            KPS: true
        },
        {
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: false,
            OTK: true,
            PZ: false,
            KPS: true
        },
        {
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: true,
            OTK: false,
            PZ: false,
            KPS: false
        },{
            numberOperation: '011',
            nameOperation: 'Чертеж на деталь',
            level: 1,
            workshop: 6465,
            area: '',
            tsht: 8,
            tpz: '',
            test: 24,
            OO: false,
            OTK: false,
            PZ: true,
            KPS: false
        }

    ]

    addOperation(item) {
        this.dataTable.push(item)
    }

    setDataTable(massive) {
        this.dataTable = massive
    }

    constructor() {
        // makeAutoObservable(this)
    }

}


export default new TechStore()


Изменение текстовых полей

import React from 'react'
import {TextField} from "@mui/material"
import {observer} from "mobx-react"
import TechStore from "../../../TechStore"

const InputText = observer(({label, index, name}) => {

	let {dataTable} = TechStore
	console.log(dataTable)

	const handleChange = (index, name) => (
		(event) => {
			dataTable[index][name] = event.target.value
			TechStore.setDataTable(dataTable)
			console.log(dataTable[index])
		}
	)

	return (
		<TextField
			id="outlined-basic"
			label={label}
			variant="outlined"
			sx={{width: '95%'}}
			value={dataTable[index][name]}
			onChange={handleChange(index, name)}
		/>
	)
})

export default InputText


6215dbcc39487997809664.png
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 2
@ParaBellum577
Потому что компонент не перерендериватся, вам нужно положить dataTable в стейт и делать SetState в функции handleChange
Ответ написан
Alexandroppolus
@Alexandroppolus
кодир
Раскомментируй makeAutoObservable(this)
И вызов TechStore.setDataTable(dataTable) тут не нужен
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект