美文网首页
REACT HOOK的一点总结

REACT HOOK的一点总结

作者: 小茶叶叶 | 来源:发表于2019-06-08 07:23 被阅读0次

    hook 诞生前的问题

    1. 组件内逻辑复杂

    有状态的组件,当业务复杂时组件间的共享状态变得频繁和复杂,使之难以维护
    Mixins Considered Harmful

    所以 我们引用redux来管理状态,但同时也会引发其他问题,如 数据不一致等

    2.性能问题

    class的方式需要编译大量冗余代码,而且压缩效果不是很好(这个没有具体实际操练对比过)

    3. react的嵌套地狱


    image.png

    这些问题是如何解决

    redux
    renderProps gitHub地址

    但是2 3 没了解到好的解决办法

    HOOK的出现带来了什么呢

    官方API


    image.png

    1. 之前我们最常见的写法

    
    class MyCard extends React.Component {
          constructor(props){
              super(props);
              this.state={
                  name:'Niko'
              };
              this.handleNameChange = this.handleNameChange.bind(this);
          }
    
          handleNameChange(e){
              this.setState({name:e.target.name})
          }
    
          render(){
              return (
                  <div> 
                      <input
                          type="text"
                          value={this.state.name}
                          onChange={this.handleNameChange}
                      />
                  </div>
              )
          }
      }
    
    

    2. 使用hook 之后的写法

    function MyCard(){
        const [name,setName] = userState('Niko')
        return (
            <div>   
                <input 
                    type="text"
                    value={name}
                    onChange={setName(e.target.value)}
                />
            </div>
        )
    }
    

    3. initialState 惰性初始值
    如果只想在第一次渲染中起作用,hook传入一个函数,那么这个函数只会在初始渲染时被调用

    const [state, setState] = useState(() => {
         const initialState = extractInterviewStateFromInterviewGroup(props);
         return initialState;
    })
    
    1. etc 还有很多 官方给出的 + 贴心的自定义HOOK

    据说,函数式编程是react的精髓~~

    还有哪些hook未曾解决

    " With hooks, we separate code not based on the lifecycle method name but based on what the code is doing " -- Dan Abramov

    相关文章

      网友评论

          本文标题:REACT HOOK的一点总结

          本文链接:https://www.haomeiwen.com/subject/cbdvxctx.html