Reactjs 在REACT中,是否有更好的方法来确定组件是否已卸载?
我知道通常的想法是在didMount/didmunmount中设置一个指示器。但这意味着我必须保卫每一个州。太冗长了Reactjs 在REACT中,是否有更好的方法来确定组件是否已卸载?,reactjs,Reactjs,我知道通常的想法是在didMount/didmunmount中设置一个指示器。但这意味着我必须保卫每一个州。太冗长了 旋转按钮: const SpinningButton = props => { const [spinning, setSpinning] = useState(false) const handleClick = useCallback((evt) => { setSpinning(true) props.onClick().then
旋转按钮
:
const SpinningButton = props => {
const [spinning, setSpinning] = useState(false)
const handleClick = useCallback((evt) => {
setSpinning(true)
props.onClick().then(() => {
setSpinning(false)
}, err => {
setSpinning(false)
})
})
return <Button onClick={handleClick} loading={spinning}>Spinning</Button>
}
const SpinningButton=props=>{
常数[旋转、固定]=useState(假)
const handleClick=useCallback((evt)=>{
固定(真)
props.onClick()然后(()=>{
固定(假)
},err=>{
固定(假)
})
})
回程纺纱
}
我使用它的地方:
const Page = props => {
const [hidden, setHidden] = useState(false)
if (hidden) return null
return <SpinningButton onClick={() => {
return fetch("https://...").then(d => {
setHidden(true)
})
}} />
}
const Page=props=>{
const[hidden,setHidden]=useState(false)
如果(隐藏)返回null
返回{
返回取回(“https://...)然后(d=>{
setHidden(真)
})
}} />
}
如果您在继续之前必须检查您的组件是否已卸载,那么您就做错了。
但是,如果没有代码,任何人都无法告诉您出了什么问题
但是,您可以通过将它包装到另一个函数来保护您的setState
componentDidMount() {
this.mounted = true;
}
setStateSafe(obj) {
if (this.mounted) {
this.setState({obj})
}
}
// and use setStateSafe insdead of setState in your code everywhere
话虽如此。这是一个反模式,您应该尽量避免它
阅读更多有关它的信息如果它已经到了必须检查组件是否已卸载的地步,则说明您做错了什么。 但是,如果没有代码,任何人都无法告诉您出了什么问题 但是,您可以通过将它包装到另一个函数来保护您的
setState
componentDidMount() {
this.mounted = true;
}
setStateSafe(obj) {
if (this.mounted) {
this.setState({obj})
}
}
// and use setStateSafe insdead of setState in your code everywhere
话虽如此。这是一个反模式,您应该尽量避免它
阅读更多关于它的信息必须保卫每一个州吗?你是什么意思?我的意思是在卸载组件后可以调用每个setState。我不介意确保其中一些是安全的。所以我保护他们所有人。这就是我所说的。唯一重要的是,如果你正在做一些异步的事情,比如API调用,并且你想在
setState
有响应时检查它是否被装载。我能想到的使用componentDidUnmount
的唯一其他时间是清除超时、间隔或分离事件侦听器。所有这些东西都应该是非常罕见的,最多只在少数几个组件中。如果你在任何情况下都在为每一个setState
这样做,那是完全没有必要的。你必须保护每一个serState吗?你是什么意思?我的意思是在卸载组件后可以调用每个setState。我不介意确保其中一些是安全的。所以我保护他们所有人。这就是我所说的。唯一重要的是,如果你正在做一些异步的事情,比如API调用,并且你想在setState
有响应时检查它是否被装载。我能想到的使用componentDidUnmount
的唯一其他时间是清除超时、间隔或分离事件侦听器。所有这些东西都应该是非常罕见的,最多只在少数几个组件中。如果您在任何情况下都要对每个setState
执行此操作,则完全没有必要。我确实在Promise中调用了setState。然后在click事件处理程序中调用了。我应该使用makecancelablepromise吗?@SinghiJohn是的,你应该!我确实在Promise中调用了setState,然后在click事件处理程序中调用了setState。我应该使用makecancelablepromise吗?@SinghiJohn是的,你应该!