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