【发布时间】:2020-08-14 08:55:50
【问题描述】:
我正在重构一些代码,因为我不得不做的道具钻探的数量是无法管理的,所以我借此机会了解了 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;
我觉得我快要解决这个问题了,但是我所有的谷歌搜索都失败了。当然,我只是误解了某些东西或没有使用正确的语法。你能帮我理解如何解决这个问题吗?我有很多其他组件和状态值要添加到这个应用程序中。哦,我将它们包装在 app.js 中,如下所示:
return (
<MileProvider>
<Header />
<form>
<PresetSelector />
<TotalDrivers />
</form>
</MileProvider>
);
}
【问题讨论】:
-
你说“他们共享一个价值观”是什么意思
-
当我使用 PresetSelector 中的选择从列表中选择某些内容时,它会显示 {totalMiles},但是当我将驱动程序更改为 1 或 2 时,它也会更改 {totalMiles}。当我在反应扩展中拉起状态时,我看不到 totalMiles 和司机,我只看到“价值”
标签: reactjs context-api