将 class 组件转换为 useState

converting class component to useState

这是一个使用 state 和 setState 的 class 组件,但我想使用 useState。此外,除了能够使用功能组件而不是 class 基本组件之外,还有什么好处?

    import React, {Component} from "react"

    class Toggler extends Component {
        state = {
            on: this.props.defaultOnValue
        }

        toggle = () => {
            this.setState(prevState => {
                return {
                    on: !prevState.on
                }
            })
        }
static 
    defaultProps = {
        defaultOnValue: false
    }

        render() {
            return (
                <div>
                    {this.props.render(this.state.on, this.toggle)}
               </div>
            )
        }
    }

    export default Toggler

到目前为止...

    import React, {useState} from "react"

    function Toggler() {
        const [on, setOn] = useState(this.props.defaultOnValue)

        toggle = () => {
            setOn( {/* what should go here? */} )

        }
static 
    defaultProps = {
        defaultOnValue: false
    }

        return (
                <div>
                    {this.props.render(on, toggle)}
                </div>
            )
    }

    export default Toggler

切换状态值就像反转从 useState 返回的当前值一样简单。

函数式组件接收传递给它们的 props 作为参数,因此无需使用 this.props。此外,要在功能组件上设置静态属性,您只需在功能本身上设置它们。

function Toggler(props) {
  const [on, setOn] = useState(props.defaultOnValue)
  const toggle = () => {
    setOn(!on)
  }
  return <div>{props.render(on, toggle)}</div>
}

Toggler.defaultProps = {
  defaultOnValue: false
}

export default Toggler

在收益方面,由您决定是否认为对您的案例来说值得。使用 useState 而不是基于 class 的组件没有什么特别的好处,但是如果你想开始使用其他挂钩,或者使用挂钩与第三方库集成,你可能希望转换你的一些组件在必要时添加到功能性的。