Я сделал следующий пример, когда setState происходит с использованием ловушек, возможность получения обратного вызова предоставляется, когда операция прошла успешно, возвращая измененное состояние.
Вроде как это произошло:
this.setState({a: 1}, () => {
console.log("Ok.");
});
Я хотел бы узнать ваше мнение об этом, что вы думаете?
Могут ли быть проблемы?
Можно ли его улучшить?
Ссылка: codesandbox
Приложение:
import React from "react";
import { useStateCallback } from "./useStateCallback";
export default function App() {
const [stateString, setStateString] = useStateCallback("James");
const [stateObj, setStateObj] = useStateCallback({
name: "James",
surname: "Bond",
number: 7
});
const { name, surname, number } = stateObj;
React.useEffect(() => {
setStateString("Bond");
setStateString("Arthur", res => {
console.log("State:", res);
});
setStateObj({
...stateObj,
number: 1
});
setStateObj(
{
...stateObj,
name: "Arthur",
surname: "Conan",
number: 21
},
res => {
console.log("State:", res);
}
);
}, []);
return (
<div>
State: {stateString}
<br />
<br />
Name: {name}
<br />
Surname: {surname}
<br />
Number: {number}
<br />
</div>
);
}
useStateCallback:
import { useState } from "react";
const useStateCallback = initialState => {
const [state, setState] = useState(initialState);
return [
state,
(state, callback) => {
setState(state);
return callback && callback(state);
}
];
};
export { useStateCallback };