без класса (речь о компоненте EditableTable)? Столкнулся с проблемой, что если в лоб методы переписать в тело FC, то получается, что при вызове handleAdd происходит иммутабильное обновление стейта (как оно, собственно, и должно быть), а метод handleDelete продолжает смотреть в скоуп старого компонента, т.к. был в нём объявлен и dataSource соответственно не поменяется...
https://codesandbox.io/s/7cxdm?file=/index.js
Мой кривой перенос на FC выглядит вот так. https://codesandbox.io/s/editable-cells-antd484-forked-j3q7l?file=/index.js
handleDelete = (key) => { const dataSource = [...this.state.dataSource]; this.setState({ dataSource: dataSource.filter((item) => item.key !== key), count: this.state.count - 1 });
Да, вопрос заключается в том, как перенести этот классовый метод в функциональный компонент.
И при этом иметь из него доступ к актуальному состоянию стейта.
const [data, setData] = useState(); const [count, setCounter] = useState(0) Или я не правильно понял тебя?)
setFoo(prevFoo => bar(prevFoo)) если не ошибаюсь (я просто на это поменял в песочнице и у меня удаление работает, поэтому вот)
Ты имеешь ввиду использовать старый массив и в него запушить новый элемент?
это я про код в handleDelete тут
вопрос в том, как сделать так, чтобы метод объявленный в одной функции, был доступен в другой функции?))
Не понял о чем ты, но проблему нашёл, в useMemo надо было список зависимостей передать просто.
тогда выходит я вашу проблему не понял. впрочем раз она решена уже неважно.
Проблема была в том, что удаление не работало
Всё, дошло, есть второй способ решения, который позволяет оставить столбцы неизменными, надо рили просто коллбэк заюзать в сетСтейт. https://codesandbox.io/s/editable-cells-antd484-forked-j3q7l?file=/index.js
Обсуждают сегодня