Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 当元素处于内部状态时,如何使用useRef?_Reactjs_React Hooks - Fatal编程技术网

Reactjs 当元素处于内部状态时,如何使用useRef?

Reactjs 当元素处于内部状态时,如何使用useRef?,reactjs,react-hooks,Reactjs,React Hooks,问题是在第一次渲染期间触发了useRef。 这可能是个问题的两个例子 当一个人可以有一些负载 const Problem1=()=>{ const ref=useRef(); 如果(装载) 返回null; 返回; } 当ref在某个条件内时 const Problem2=()=>{ const ref=useRef(); 返回用户?:; } 沙盒示例 在第二种情况下,我至少可以在开始时用display:none显示元素。但如何解决第一个问题我不知道 这些情况下的最佳做法是什么?看看这是否适

问题是在第一次渲染期间触发了useRef。 这可能是个问题的两个例子

  • 当一个人可以有一些负载
  • const Problem1=()=>{
    const ref=useRef();
    如果(装载)
    返回null;
    返回;
    }
    
  • 当ref在某个条件内时
  • const Problem2=()=>{
    const ref=useRef();
    返回用户?:;
    }
    
    沙盒示例

    在第二种情况下,我至少可以在开始时用display:none显示元素。但如何解决第一个问题我不知道


    这些情况下的最佳做法是什么?

    看看这是否适合您:

    从React文档:

    useRef()

    但是,useRef()不仅适用于ref属性。它可以方便地保留任何可变值,类似于在类中使用实例字段的方式

    这是因为useRef()创建了一个普通的JavaScript对象。useRef()和自己创建{current:…}对象之间的唯一区别是,useRef将在每次渲染时为您提供相同的ref对象。

    useRef
    对象不会在渲染期间更改。对于具有
    当前属性的
    useRef
    对象,您将始终具有相同的引用。可能发生变化的是您在
    当前属性中保留的内容

    函数应用程序(){
    常量input1_ref=React.useRef(null);
    常量input2_ref=React.useRef(null);
    const[showInput2,setShowInput2]=React.useState(false);
    React.useffect(()=>{
    输入1\u参考电流?
    console.log('Input1已装入…'))
    :console.log('Input1尚未装入…');
    输入2\u参考电流?
    log('Input2已装入…'))
    :console.log('Input2尚未装入…');
    });
    返回(
    输入1
    {showInput2&&
    输入2
    }
    设置ShowInput2((prevState)=>!prevState)}>单击
    );
    }
    ReactDOM.render(,document.getElementById('root'))
    
    
    
    问题出在哪里?“在第一次渲染期间触发useRef”没有问题。使用ref而不使用valueOk是可以的,我不是说这是useRef的问题,只是我不知道如何在这些情况下使用它。那么,在第二种情况下,当用户在第一次渲染时为false时,如何获得正确的引用?您询问如何使用,而您没有显示usesOk的示例,如果您不理解我所说的,我可以添加一个示例。补充!你的例子没有说明问题是什么。Ref表示当前显示的元素。如果元素未显示,则ref中没有值。是否要访问未附加到文档DOM的DOM元素?是的,谢谢。我认为在第一次渲染之后不能更改useRef。需要在youtube上阅读更多文档而不是视频)。对不起,对问题的解释不好。没问题。对象不会改变。可能发生变化的是您决定在对象的
    当前属性中保留的内容
    current
    是属性的实际名称。这就是为什么您使用
    一些当前参考文件访问它的原因
    
    const Problem1 = () => {  
     const ref = useRef();
    
     if (loading)    
         return null;
    
     return <input ref={ref} value={} />;
    
    }
    
    const Problem2 = () => {
     const ref = useRef();
    
     return user ? <input ref={ref} value={user.name} /> : <Exit >;
    
    }