reactjs - 在 React 中返回地图项时显示一次控制所有内容的滑块
问题描述
我返回了一些 CMS 内容,我的目标是根据用户通过单击减号/加号箭头选择的年份来控制内容的年份滑块。
这是我的代码:
import "./styles.css";
import React from "react";
export default function App() {
return (
<div className="App">
<DatesProvider>
{data.map((item, index) => {
const Slice = slices[item.type];
return <Slice section={item.section} key={index} />;
})}
</DatesProvider>
</div>
);
}
const DateContext = React.createContext({});
const DatesProvider = ({ children }) => {
const [dates, setDates] = React.useState({});
return (
<DateContext.Provider value={{ dates, setDates }}>
{children}
</DateContext.Provider>
);
};
const DatePicker = ({ section }) => {
const { dates, setDates } = React.useContext(DateContext);
React.useEffect(() => {
// Set initial date
setDates((prevDates) => {
prevDates[section] = 2021;
return { ...prevDates };
});
// Clean up on dismount
return () => {
setDates((prevDates) => {
delete prevDates[section];
return { ...prevDates };
});
};
}, []);
const handlePlus = () => {
setDates((prevDates) => ({
...prevDates,
[section]: prevDates[section] + 1
}));
};
const handleMinus = () => {
setDates((prevDates) => ({
...prevDates,
[section]: prevDates[section] - 1
}));
};
return (
<div style={{ marginTop: 30 }}>
<button onClick={handleMinus}>-</button>
<span>{dates[section]}</span>
<button onClick={handlePlus}>+</button>
</div>
);
};
const Item = ({ section }) => {
const { dates } = React.useContext(DateContext);
return (
<div>
Section: {section} | Year: {dates[section]}
</div>
);
};
const data = [
{ type: "DatePicker", section: "foo" },
{ type: "Item", section: "foo" },
{ type: "Item", section: "foo" },
{ type: "DatePicker", section: "bar" },
{ type: "Item", section: "bar" },
{ type: "Item", section: "bar" }
];
const slices = { DatePicker, Item };
结果目前是这样的:
正如你所知道的,它多次返回年份滑块,结构类似于:
<slider> - 2021 + </slider>
<section class= "container-of-all-items">
<all-items></all-items>
</section>
<slider> - 2021 + </slider>
<section class= "container-of-all-items">
<all-items></all-items>
</section>
我的目标是只有一年的滑块包装/控制整个内容项,而不是上面重复的滑块:
<slider> - 2021 + </slider>
<section class= "container-of-all-items">
<all-items></all-items>
</section>
知道如何通过维护地图来实现它Slices
吗?
解决方案
我明白了,我花了一段时间才明白,你基本上想要一组 + 和 - 但项目列表。
然后在您的情况下,您的代码实际上简化了。
function Lists() {
const { dates, setDates } = React.useContext(DateContext);
const onClick = () => { setDates(...) }
return (
<>
<div onClick={onClick}>+</div>
<>
{dates.map((item, index) => {
return <Slice section={item.section} key={index} />
})}
</>
<div>-</div>
</div>
);
}
然后更改您的应用程序。
export default function App() {
return (
<div className="App">
<DatesProvider value={...}>
<Lists />
</DatesProvider>
</div>
);
}
实际上,您可能根本不需要上下文,因为逻辑已被提升到父级。但这取决于你。
推荐阅读
- powermock - Jacoco 离线仪器在 Java 11 中无法用于 PowerMock 测试
- python-3.x - 如何使用 Selenium 和 Python 从下拉列表中选择一个值
- java - 算术异常整数
- rust - 位置无关代码 (PIC) 中的绝对地址
- pandas - 使用大量 RAM 将 GeoPandas 写入 to_CSV
- swift - 如何将某些东西限制在中心顶部的锚点上
- ios - AVFoundation : 如何完整获取 1 秒的音频采样缓冲区数据,44100 个浮点值
- python - “Python如何(以及为什么)精确计算完美平方的平方根”?
- python - 使用 CX_Oracle 和 Pandas 从 Oracle db 读取“Unicode 字符“ü””时的编码问题
- python - 井字游戏方法来检查玩家是否赢了