#react-native #react-hooks
#react-native #реагирующие перехваты
Вопрос:
Мне нужно повторно отобразить это состояние вручную.
const [person] = React.useState(new Person());
У меня есть методы внутри класса Person для его обновления (например person.setName('Tom')
, ).
Когда я обновляю person, используя метод из самого себя, он не запускает повторную визуализацию состояния person.
const carouselData = React.useMemo(() => {
// Doesn't re-render when the fields on the person class update
}, [person]);
Есть ли способ принудительно повторно отобразить это состояние без использования функции setState?
В идеале, есть ли способ вызвать эту повторную визуализацию изнутри самого класса Person?
Или это полное злоупотребление функциональностью useState? Будет ли лучший реактивный хук для подключения этого?
Спасибо!
Комментарии:
1. Использование изменяемых классов в качестве объекта состояния является антипаттером, поскольку хуки разработаны вокруг неизменяемых ссылок. Если экземпляр остается неизменным между рендерами, то передача его в список зависимостей не позволит React обнаруживать изменения внутри объекта.
Ответ №1:
вы действительно скучаете по его использованию, react сильно зависит от функционального программирования. вы должны делать что-то вроде:
const [person, setPerson] = useState(new Person());
...
setPerson(setPersonName(person, 'Tom'));
это просто глупый пример, но суть вы поняли. react будет повторно отображать только в том случае, если состояние изменено, он не будет отслеживать, изменяется ли объект состояния или что-то подобное, что раньше делал angularjs
Ответ №2:
Вместо этого Person может быть prop или in context. Сначала создайте свой экземпляр вне вашего компонента.
const person = new Person([]);
Затем передайте person
как prop.
function App({person}) {
const [personName, setPersonName] = useState(person.personName);
function handleNameChange(txt) {
person.addTodo(txt);
setPersonName(person.personName);
}
function handleSubmit(txt) {
handleNameChange(txt);
}
return (...)
}