Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/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
Javascript 将裁判作为道具传球以获得越位_Javascript_Reactjs_React Hooks_Ref_Use Ref - Fatal编程技术网

Javascript 将裁判作为道具传球以获得越位

Javascript 将裁判作为道具传球以获得越位,javascript,reactjs,react-hooks,ref,use-ref,Javascript,Reactjs,React Hooks,Ref,Use Ref,我有一个组件,我想获取ref并将其传递给另一个组件(固定到顶部导航栏,不透明度为0),以检查此ref的偏移量何时小于window.pageYOffset,如果小于window.pageYOffset,请更改我的状态并将导航栏的不透明度设置为1。问题是,当我传递ref时,其他组件将变为null,从而导致错误。当这个ref不为null时,我如何传递它 const galleryRef = useRef(null); <div className="gallery py-5 bor

我有一个组件,我想获取ref并将其传递给另一个组件(固定到顶部导航栏,不透明度为0),以检查此ref的偏移量何时小于window.pageYOffset,如果小于window.pageYOffset,请更改我的状态并将导航栏的不透明度设置为1。问题是,当我传递ref时,其他组件将变为null,从而导致错误。当这个ref不为null时,我如何传递它

const galleryRef = useRef(null);

 <div className="gallery py-5 border" ref={galleryRef}>
      <FixedNavbar ref={galleryRef} />
</div>
const galleryRef=useRef(null);
FixedNavBar.js

const handleFixedNavbar = () => {
    if (window.pageYOffset > ref.current.offsetTop) {
      setIsFixed(true);
    } else {
      setIsFixed(false);
    }
  };

 useEffect(() => {
    window.addEventListener('scroll', handleFixedNavbar);
    return () => {
      window.removeEventListener('scroll', handleFixedNavbar);
    };
  }, []);

<div ref={navMenusRef} className={`${isFixed ? 'fixed-nav' : ''}`}>
      {navMenus.map((item, index) => (
        <Link
          key={index}
          to={item.type}
          data-id={item.id}
        >
          {item.name}
        </Link>
      ))}
    </div>
const handleFixedNavbar=()=>{
如果(window.pageYOffset>ref.current.offsetTop){
setIsFixed(true);
}否则{
setIsFixed(false);
}
};
useffect(()=>{
window.addEventListener(“滚动”,handleFixedNavbar);
return()=>{
window.removeEventListener('scroll',handleFixedNavbar);
};
}, []);
{navMenus.map((项目,索引)=>(
{item.name}
))}
您可以使用with
useState()
在ref更新时重新渲染:

const [galleryRef, setGalleryRef] = useState(null);

 <div className="gallery py-5 border" ref={setGalleryRef}>
      <FixedNavbar galleryRef={galleryRef} />
</div>

这对我不起作用:(我认为问题是当ref还没有创建并且current总是空的时候,道具就被传递了,有没有办法只在ref已经创建的时候传递ref?参见更新的答案如果ref为空,参见Ori的条件渲染
useEffect(() => {
  if(!galleryRef) return; // do nothing when ref is not set
  
  const handleFixedNavbar = () => {
    setIsFixed(window.pageYOffset > galleryRef.offsetTop); // sets true or false according to condition
  };

  handleFixedNavbar(); initial set

  window.addEventListener('scroll', handleFixedNavbar);

  return () => {
    window.removeEventListener('scroll', handleFixedNavbar);
  };
}, [galleryRef]);