javascript - 状态改变但不渲染
问题描述
当一个元素添加到我的列表中时,我想在单击时呈现一个设置菜单,并在一个处于活动状态时禁用所有其他设置菜单。我还有一个处于不同状态的示例元素,并且希望在它打开时停用所有设置菜单,如果设置菜单打开,则将其禁用。我将所有元素的设置状态存储在一个数组中,并且在我的更新函数中,我的设置状态的副本正在更改,但我的实际设置状态没有。我认为这与我的使用效果有关,当我将其注释掉时,我的设置状态确实发生了变化,但没有呈现。在我映射我的图表数据之前它正在工作,但我不确定是什么导致它停止工作,因为注释掉它仍然不会呈现设置。
const [settings, setSettings] = useState([]);
const [sampSettings, setSampSettings] = useState(false);
const updateSettings = (val, index) => {
if(val){
let copySettingsFalse = [...settings]
copySettingsFalse[index]=false;
return setSettings(copySettingsFalse);
}
let copySettingsTrue = settings.fill(false);
copySettingsTrue[index] = true;
console.log(copySettingsTrue)
return setSettings(copySettingsTrue);
};
useEffect(() => {
if (stockList.length>0){
stockList.map((val,index) => {
// Chart
setLineData([
...lineData,
{
labels:trimLineDataHistory[index],
datasets: [
{
label: val.Tick,
data: trimLineDataHistory[index].reverse(),
pointRadius: 0,
fill: false,
backgroundColor: day ? "#e9dfd4" : "#141e28",
borderColor: "#52ad59",
},
],
},
]);
// Settings
setSettings([...settings, false]);
})}
return;
},[stockList]);
// Settings
// useEffect(() => {
// if (settings.includes(true)) {
// setSampSettings(false);
// }
// if (sampSettings === true) {
// setSettings(settings.fill(false));
// }
// return;
// }, [settings,sampSettings]);
if(stockList.length>1)
return(
<>
{stockList.map((val, index) => {
const { Tick, Name } = val;
return(
<div className="stockItemIcon">
<BsFillGearFill
className="gearIcon"
onClick={() => updateSettings(settings[index], index)}></BsFillGearFill>
<div className={settings[index]?
(day?"settingsContainerAlt showSettings daySettings":"settingsContainerAlt showSettings nightSettings")
:(day?"settingsContainerAlt hideSettings daySettings":"settingsContainerAlt hideSettings nightSettings")}>
</div>)}
</>)
解决方案
您尝试添加“Key”属性 BsFillGearFill 标记并为其设置和更新值。它可以是任何值
推荐阅读
- angular - 角 6 | 只调用一次解析器
- android - 如何使用“mapping.txt”文件进行 Android 中发布版本的调试和错误异常处理程序
- python - 我希望我的 python 屏幕截图应用程序不会覆盖屏幕截图
- javascript - 如何得到一个圆的x,y距离
- vba - 如何将一张表的列数据与另一张表匹配?
- bash - 根据用户输入重新启动 bash 脚本
- python - 在一个字段中插入多个关键字
- javascript - React & Redux: Uncaught TypeError: (0 , _reactRedux.connect) 不是函数
- python - Python 文件调用的状态 500
- c - 如果出现错误,SDL_GetError 会说什么?