美文网首页
React 易错点

React 易错点

作者: 我的钱包瘪瘪的 | 来源:发表于2020-03-31 22:27 被阅读0次

1. css的模块化

    // 作用: 避免css的污染, 只作用于当前文件
    
    .box {width: 10}
    .box2: {composes: box; height: 30}
    
    // 引入的css文件, 必须xxx.module.css
    import style from './index.module.css'
    
    // 使用box2, 达到复合多类名
    <div style={style.box2}> </div>

2. setState合并

    componentDidMount() {
        // 会合并成一次
        this.setState({counter: this.state.counter + 1});
        this.setState({counter: this.state.counter + 1});
        this.setState({counter: this.state.counter + 1});
    }

3. 新的生命周期函数(16.3)

参考: https://juejin.im/post/5aca20c96fb9a028d700e1ce

  1. getDerivedStateFromProps

  2. getSnapshotBeforeUpdate

4. ref

    // 1. 回调的ref
    
    <div ref={ div => this.divRef = div }> text </div>
    
    this.divRef
    
    // 2. 新ref
    this.inputRef = React.createRef();
    
    <div ref={this.inputRef}> text </div>
    
    this.divRef.current
    
    // 3. hook的ref, 不单单存储dom
    
    const inputEl = useRef(null);
    
    <input ref={inputEl} type="text" />
    
    inputEl.current

5. ref的转发

  1. forwardRef: 给父组件暴露具体dom
  2. useImperativeHandle: 只暴露具体dom的具体属性
  3. 参考: https://juejin.im/post/5d8f478751882509563a03b3
// 只给父组件暴露具体dom的部分属性
function FancyInput(props, ref) {
  const inputRef = useRef()
  const [text, setText] = useState('')
  
  useImperativeHandle(ref, () => ({ //第一个参数:暴露哪个ref;第二个参数:暴露什么
    focus: () => {
      inputRef.current.focus()
    },
    value: text
  }))

  const handleChange= (e) => {
    setText(e.target.value);
  }
  return <input ref={inputRef} onChange={handleChange} value={text}/>
}
FancyInput = forwardRef(FancyInput)

// 给父组件暴露具体dom
const FancyInputFn = forwardRef((props, ref) => {
  return (
    <div>
        <div ref={ref}>tes</div>
    </div>
  )
})

// 父组件获取子组件的ref
export default function App() {
  const inputRef = useRef(null)
  const inputRef2 = useRef(null)
  const handleClick = () => {
    console.log(inputRef.current, inputRef2.current);
  }
  return (
    <div>
      <FancyInput ref={inputRef}></FancyInput>
      <FancyInputFn ref={inputRef2}></FancyInputFn>
      <button onClick={handleClick}>点击</button>
    </div>
  )
}

相关文章

  • React 易错点

    1. css的模块化 2. setState合并 3. 新的生命周期函数(16.3) 参考: https://ju...

  • 易错点

    rate_ave=1042.00/793 而非rate_ave=1042/793if rate>=rate_av...

  • 易错点

    泛型 泛型约束使用extends而非implements 泛型类型没有多态的说法,所以出现了?通配符 泛型方法必须...

  • 四级备考笔记

    易错点 NOT!!

  • React 易错点整理

    1、render()函数里面的return关键字后面的代码必须在()内包括,否则会报错! 2、ES6里面的箭头函数...

  • 补充9: react一些易错点

    1. react不支持img使用相对路径 react img中的src不支持直接赋值相对路径,即不支持 需要使用 ...

  • 函件易错点

    能将思维导图更好的运用在工作上,不仅能让自己的思路变的清晰,也让增加了我对工作的兴趣和热情!希望自己会有更大的改变!

  • golang易错点

    sdfsdsdfs

  • Leetcode 易错点

    1.索引变量自加的时候要注意与上下文之间的关系,要保证此变量不会再被调用,才可以自加。

  • 初中易错成语

    1、白驹过隙:比喻时间过得很快。 【易错点】易误解为:轻而易举。 2、百里挑一:形容十分出众。 【易错点】易误解为...

网友评论

      本文标题:React 易错点

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