Reputation: 51
I' m trying to get eventsData from updateScoreHandler. I can't understand, why when I type in input, in console is showing undefined (initial state). In console whe it's starting is showing: changed undefined and after this: changed {elements: Array(2), data: Array(2)} (correct data)
const [eventsData, setEventsData] = useState<{
elements: JSX.Element[];
data: { id: string; home?: number; away?: number }[];
}>();
useEffect(() => {
loadEvents();
}, []);
useEffect(() => {
console.log('hook', eventsData);
}, [eventsData]);
const loadEvents = async () => {
const res = await axios.get(BACKEND_URL + '/events');
const events = res.data.map((event: MatchType) => (
<input type="number" onChange={(e) => updateScoreHandler()} />
)
setEventsData({ elements: events, data: res.data });
};
const updateScoreHandler = () => {
console.log(id, value, target, eventsData);
};
Upvotes: 0
Views: 33
Reputation: 9571
firstly, don't store JSX elements in state, your probably running into stale scope problems or something, i.e. at the time of storing your inputs in state updateScoreHandler will have eventsData as undefined
try something like -
const loadEvents = async () => {
const res = await axios.get(BACKEND_URL + '/events');
setEvents(res.data);
};
then
const updateScoreHandler = (event) => {
// do something with event?
};
...
return (
...
{events.map(event => (
<input type="number" onChange={(e) => updateScoreHandler(event)} />
))}
...
)
Upvotes: 1