【发布时间】:2020-05-22 21:12:51
【问题描述】:
我有这个带有状态的组件,当用户在线时,它会增加计数。我想把它改成带钩子的功能组件,我在下面做了
class App extends React.Component {
state = {
isOnline: true,
count: 1
}
handleOnline = () => {
if (!this.state.isOnline) {
this.setState({
count: this.state.count + 1
}, () => {
this.setState({ isOnline: !this.state.isOnline })
})
} else {
this.setState({ isOnline: !this.state.isOnline })
}
}
render() {
return (
<div className="App">
<h1>online ==> {this.state.isOnline ? 'Online' : 'Offline'}</h1>
<h1>count ==> {this.state.count}</h1>
<button onClick={this.handleOnline}>Toggle</button>
</div>
);
}
}
这是我用钩子转换成功能组件的过程,
const App = () => {
const [isOnline, setIsOnline] = useState(true)
const [count, setCount] = useState(1)
const handleClick = () => {
if (!isOnline) {
setIsOnline(!isOnline)
setCount(count + 1)
} else {
setIsOnline(!isOnline)
}
}
return (
<div className="App">
<h1>online ==> {isOnline ? 'Online' : 'Offline'}</h1>
< h1 > count ==> {count}</h1>
<button onClick={handleClick}>Toggle</button>
</div>
)
}
在基于类的组件中,我已经读到不要一个接一个地使用setState所以我像这样使用this.setState中的回调函数
this.setState({
count: this.state.count + 1
}, () => {
this.setState({ isOnline: !this.state.isOnline })
})
现在,在功能组件中我已经一个接一个地使用了 setCount 和 setIsOnline 好不好???
const handleClick = () => {
if (!isOnline) {
setIsOnline(!isOnline)
setCount(count + 1)
} else {
setIsOnline(!isOnline)
}
我已经阅读过使用 useEffect 进行回调,但我得到的只是无限循环。即使我的两个组件都工作并给了我想要的结果。我想知道我是否必须使用 useEffect 进行回调,或者我在功能组件中使用钩子的实现是否正确???
【问题讨论】:
标签: javascript reactjs callback components react-hooks