gpt4 book ai didi

javascript - 如何从组件 Prop 更改 let 的值?

转载 作者:行者123 更新时间:2023-11-30 13:57:45 24 4
gpt4 key购买 nike

我试图在时间等于 0 时隐藏卡片,但 timeLeft 永远不会更新。知道我在这里做错了什么吗?

<div style={{ flexDirection: "column", overflowY: "scroll" }}>
{sorted.map((d, i) => {
let timeLeft;
return (
<div key={i} className="card__container">
<ProgressBar
percentage={d.time * 10}
timing={res => (timeLeft = res)}
/>
</div>
);
})}
</div>

我的进度条是这样的

constructor(props) {
super(props);
this.state = {
timeRemainingInSeconds: props.percentage
};
}
componentDidMount() {
timer = setInterval(() => {
this.decrementTimeRemaining();
}, 1000);
}

decrementTimeRemaining = () => {
if (this.state.timeRemainingInSeconds > 0) {
this.setState({
timeRemainingInSeconds: this.state.timeRemainingInSeconds - 10
});
} else {
clearInterval(timer);
this.props.timing(0);
}
};
render() {
return (
<div className="Progress_wrapper">
<div
className="Progress_filler"
style={{ width: `${this.state.timeRemainingInSeconds / 2}%` }}
/>
</div>
);
}
}

最佳答案

我认为该变量没有得到更新,因为您的 map 函数是一种功能组件,因此它是一个渲染函数。如果您对父组件进行更改,该变量基本上总是会重置。

您可以通过将其外部化并使用 useState Hook 来创建一个真正的功能组件,类似于以下内容(我真的不知道,但这也可以作为您的 map 函数中的定义) :

function CardContainer(props) {
const [timeLeft, setTimeLeft] = useState(0); // @todo set initial state based on your own definition

return (
<div key={i} className="card__container">
<ProgressBar
percentage={d.time * 10}
timing={res => setTimeLeft(res)}
/>
</div>
);
}

关于javascript - 如何从组件 Prop 更改 let 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56900738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com