Я выполняю рефакторинг некоторого кода, потому что количество операций по бурению, которое я должен был выполнить, было просто неуправляемым, поэтому я воспринимаю это как возможность узнать о Context API, но я просто не понимаю, почему состояние не ведя себя так, как я ожидал ... Вот мой файл контекста:
import React,{useState, createContext} from 'react';
export const MileContext = createContext();
export const MileProvider = props => {
const [totalMiles, setTotalMiles] = useState(0);
const [drivers, setDrivers] = useState(1);
return (
<MileContext.Provider
value = {
[totalMiles, setTotalMiles],
[drivers, setDrivers]
}>
{props.children}
</MileContext.Provider>
)
}
Когда я меняю totalMiles из другого компонента, а затем меняю драйверы из другого компонента, оказывается, что они используют одно значение ... Вот два других компонента.
import React, {useState, useContext} from 'react';
import "./main.css";
import { MileContext } from './MileContext';
const TotalDrivers = () => {
const [drivers, setDrivers] = useContext(MileContext);
const onDriverChange = (event) => {
setDrivers(event.target.value)
};
return(
<div>
<p>Total Drivers</p>
<label>
<select value={drivers} onChange={onDriverChange}>
<option value="1">1</option>
<option value="2">2</option>
</select>
</label>
</div>
)
}
export default TotalDrivers;
import React, {useState, useContext} from 'react';
import "./main.css";
import {PRESETS} from "./presets";
import { MileContext } from './MileContext';
const PresetSelector = () => {
const [totalMiles, setTotalMiles] = useContext(MileContext);
const onTotalMileChange = (event) => {
setTotalMiles(event.target.value)
};
return(
<div>
<label>
<h3>Select a preset for your trip (these are round trips from the warehouse and back)</h3>
<select onChange={onTotalMileChange}>
<option value="0">Custom Trip</option>
{
Object.entries(PRESETS).map(([campus, mileage]) => (
<option key={campus} value={mileage}>
{campus}
</option>
))}
</select>
</label>
trip total miles = {totalMiles}
</div>
)
}
export default PresetSelector;
Я чувствую, что нахожусь на грани выяснения этого, но все мои googles падают. Конечно, я просто что-то неправильно понимаю или не использую правильный синтаксис. Можете ли вы помочь мне понять, как это исправить? У меня есть так много других компонентов и значений состояния, чтобы добавить в это приложение. Ох, и я обертываю их в приложение. js вот так:
return (
<MileProvider>
<Header />
<form>
<PresetSelector />
<TotalDrivers />
</form>
</MileProvider>
);
}