zoukankan      html  css  js  c++  java
  • [React] Manipulate the DOM with React refs

    React is really good at creating and updating DOM elements, but sometimes you need to work with them yourself. A common use case for this is when you’re using a third party library that wasn’t built for or with React specifically. To do this, we need to have some value that’s associated with our component (like state) to store a reference to the DOM element, but doesn’t trigger re-renders when it’s updated (unlike state). React has something specifically for this and it’s called a ref.

    You create a ref object with the useRef hook and that object’s current property is the current value of the ref. It can be anything, but if you pass that ref object to a component as a prop called ref, then React will set the current property to the DOM element it creates so you can reference it and manipulate it in your useEffect hook.

    In this lesson we’ll get to see how that works with a cool library called vanilla-tilt.

    function Tilt({ children }) {
          const tiltRef = React.useRef();
    
          // refs provide a way to access DOM nodes or React elements created in the render method.
    // we need to access DOM thought ref, so we need to render the DOM first, useEffect hook
    // is the prefect place to do it.
    React.useEffect(() => { // useRef returns a mutable ref object whose .current property is initialized to the passed argument (initialValue). const tiltNode = tiltRef.current; // The returned object will persist for the full lifetime of the component. const vanillaTiltOptions = { max: 25, speed: 400, glare: true, 'max-glare': 0.5 }; // Initiating VanillaTilt and passing tiltNode and vanillaTiltOptions VanillaTilt.init(tiltNode, vanillaTiltOptions); return () => { // ensuring that any node refs in memory get garbage collected // prevent memory leaks tiltNode.vanillaTilt.destroy(); }; // adding a dependencies array, to avoid multiple renders }, []); return ( // Referencing the useEffect hook return <div ref={tiltRef} className="tilt-root"> <div className="tilt-child">{children}</div> </div> ); }
  • 相关阅读:
    Nginx配置虚拟主机
    TCP有限状态机
    一次完整的HTTP请求过程
    129 爬虫 requests request 爬图片
    算法: 二分查找 冒泡 插入 选择排序
    121 monogdb安装, 增删改查, mongodb中的update修改器 pymomgo
    119 websocket 群聊 单聊 websocket的握手 加密解密
    118 falsk智能机器人 语音合成 语音识别
    117 flask中的上下文实现原理 偏函数 线程 setattr
    python基础中的内置方法:
  • 原文地址:https://www.cnblogs.com/Answer1215/p/13597968.html
Copyright © 2011-2022 走看看