标签: ref

React:检查不同组件中的元素是否重叠

我正在查看许多检查元素是否重叠的答案,但它们不适用。

我有一个包装组件,它有一个位置固定的标头和子组件

const Wrapper = ({ children }) => {

  return (
    <>
    <Header/>
    {children}
    </>
  )
};

export default Wrapper
Run Code Online (Sandbox Code Playgroud)

我需要知道标题何时与几个不同页面(子页面)中的某些部分重叠,以便更改标题颜色

我试图在包装器组件中进行检测,但元素不存在或容器无法访问

我是否需要将引用从包装器一直传递给所有孩子?有没有更简单的方法来做到这一点?

谢谢

ref overlap reactjs

4
推荐指数
1
解决办法
3897
查看次数

即使使用备忘录,使用forwardRef做出反应也总是更新子组件

所以我有一个 DatePicker ChildComponent,我需要从Parentref访问它。基本上一切正常。forwardRef

但有一个问题。

每次我更新与DatePickerChild没有任何关系的Parent Other ChildComponents上的某些内容时,DatePicker 仍然会呈现,即使它不应该呈现。

我尝试删除从父级到子级的引用传递,然后每次我对我想要解决的其他组件进行更新时,该组件就不再重新渲染。

<NativeDatePicker
  ref={datePickerRef} // <-- When I comment this component is not rendering anymore.
  currentDate={values.birthday}
  onDateChange={handleBirthdayChange}
/>
Run Code Online (Sandbox Code Playgroud)

我已经开始通过使用useCallback来优化回调记忆,但仍然没有运气。

下面是我的代码:

日期选择器.tsx

type Props = {
  // ref: RefObject<DatePicker>;
  currentDate: string | Date | undefined;
  onDateChange: (newDate: string) => void;
};

const NativeDatePicker = forwardRef(
  ({ currentDate, onDateChange }: Props, ref: any) => {
    console.log('tadah!');
    return (
      <DatePicker
        ref={ref}
        style={wrapperStyle.wrapper}
        date={currentDate}
        mode="date"
        placeholder="select date" …
Run Code Online (Sandbox Code Playgroud)

javascript ref reactjs react-forwardref create-ref

4
推荐指数
1
解决办法
8707
查看次数

使用 useRef 或 createRef 而不是内联引用有什么优点?

我正在进行代码审查,发现另一位开发人员编写的代码,例如:

function sampleComponent() {
       let divRef = {};
    
       return (
        <div ref={(el) => { divRef = el }}></div>
       )
    }
Run Code Online (Sandbox Code Playgroud)

然后使用 divRef 作为 DOM 元素的引用。

然而,我知道的模式是createRef在类组件中使用,useRef在功能组件中使用钩子。甚至 ReactJS 官方https://reactjs.org/docs/refs-and-the-dom.html也表示要避免未来 React 版本的内联引用。这是一个要写的遗留模式吗?

到目前为止我能研究的是,内联会ref渲染函数两次,因此建议避免。

我想知道对此还有什么其他解释?

ref reactjs use-ref create-ref

4
推荐指数
1
解决办法
1630
查看次数

为任何类型的 HTML 元素键入自定义 useRef 挂钩

我对 Typescript 还是有点陌生​​,我的目标是React.useRef在 Typescript 中创建一个返回引用的自定义钩子。我希望为任何 HTML 元素键入此引用,而不仅仅是按钮。我遇到了正确输入此自定义挂钩的问题。

这是我的钩子:

type CustomRefHook = (dependencies?: string | boolean | number[]) => React.MutableRefObject<HTMLButtonElement | null>;

const useCustomRefHook: CustomRefHook = (...dependencies) => {
  const ref = React.useRef<HTMLButtonElement | null>(null);

  useEffect(() => {
    // ... do stuff
  }, dependencies)

  return ref;
}
Run Code Online (Sandbox Code Playgroud)

目前,这个钩子的大部分用例都是按钮,但我希​​望最终将其扩展到任何类型的 HTML 元素。我尝试使用HTMLElement而不是HTMLButtonElement,但是我收到以下类型错误:

Type 'MutableRefObject<HTMLElement | null>' is not assignable to type 'string | ((instance: HTMLButtonElement | null) => void) | RefObject<HTMLButtonElement> | null | undefined'.
  Type 'MutableRefObject<HTMLElement …
Run Code Online (Sandbox Code Playgroud)

html ref typescript reactjs

4
推荐指数
1
解决办法
4423
查看次数

如何通过 React-slick useRef 钩子和打字稿使用 AutoPlay 方法

我目前正在使用"typescript": "^3.7.5""react-slick": "^0.25.2"

我面临的问题是我无法使用自动播放方法slickPlay以及slickPause新的useRef挂钩和打字稿。

目标:能够使用播放/暂停按钮暂停自动播放和恢复自动播放。我的播放/暂停按钮将位于分页点旁边。

我的代码:

import React, { useStateuseRef } from 'react';

const myComponent = () => {
  const [autoPlayOn, setAutoPlayOn] = useState<boolean>(true);
  const sliderRef = useRef<typeof Slider | null>(null);
  
  <Slider
    ref={sliderRef}
    appendDots={(dots): JSX.Element => (
      <MyButton
        onClick={() => {
          setAutoPlayOn(!autoPlayOn);
          if (autoPlayOn) {
            sliderRef.slickPlay();
          } else {
            sliderRef.slickPause();
          }
        }}
      />
    )}
    {...otherSettings}
  >
}
Run Code Online (Sandbox Code Playgroud)

我收到的类型错误是:

No overload matches this call.
  Overload 1 of 2, '(props: Readonly<Settings>): Slider', …
Run Code Online (Sandbox Code Playgroud)

ref typescript reactjs react-slick react-hooks

4
推荐指数
1
解决办法
5111
查看次数

在Vue.js中,如何选择组件的节点元素?$refs 可能吗?

因为我想选择组件的节点元素,所以我想也许我可以使用$refs。

\n

家长

\n
<template>\n    <my-component ref="myComponentElement"></my-component>\n</template>\n\n<script>\n  import MyComponent from "./MyComponent.vue";\n\n  components:{\n     MyComponent\n  },\n    mounted() {\n    const theElement = this.$refs.myComponentElement;\n    \xe2\x80\xa6\n  },\n</script>\n
Run Code Online (Sandbox Code Playgroud)\n

孩子

\n
<template>\n   <div>\n     <div>test</div>\n   </div>\n</template>\n
Run Code Online (Sandbox Code Playgroud)\n

我将“ref”添加到组件标签,并使用“this.$refs.myComponentElement”来获取元素。但它没有\xe2\x80\x99 获取节点元素,而是返回一个代理对象。

\n

那么如何选择自定义组件的节点元素呢?我可以使用 $refs 吗?谢谢~

\n

element ref vue.js vue-component

4
推荐指数
1
解决办法
1万
查看次数

相互分配 vue 状态 (ref()) 的正确方法是什么?

由于 ref().value,我对在 vue 3(脚本设置)中使用 ref() 感到有点困惑。我想知道的是我应该使用 ref().value = ref().value 还是 ref()=ref() 我提供了一个例子:

<script setup>
let stateOne=ref('1')
let stateTwo=ref('2')

//This way:
stateOne.value=stateTwo.value

//Or this:
stateTwo=stateOne

</script>
Run Code Online (Sandbox Code Playgroud)

感谢您帮助我更好地理解这个概念

ref vue.js vuejs3 vue-composition-api

4
推荐指数
1
解决办法
2450
查看次数

通过ref传递对象

有什么区别

public function Foo(ref Bar bar)
{
   bar.Prop = 1;
}

public function Foo(Bar bar)
{
   bar.Prop = 1;
}
Run Code Online (Sandbox Code Playgroud)

基本上什么是"参考"的重点.总是通过引用不是一个对象?

.net c# ref

3
推荐指数
2
解决办法
426
查看次数

为什么"ref"关键字与System.ServiceModel.Channels.Message一起使用?

我现在正在查看一些C#代码,我想检查一下,在我理解它应该如何工作的时候我不会疯狂.

它与传递System.ServiceModel.Channels.Message有关.采用Message对象的每个方法都有一个类似于此的方法签名:

void SomeMethod(ref Message message) { ... }
Run Code Online (Sandbox Code Playgroud)

我不明白为什么"ref"关键字在那里.据我所知,如果该方法不会完全替换该对象,则不需要它.

void SomeMethod(ref Message message)
{
    message = new Message();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果消息,例如,只是在标题中添加了其他内容,或者只是从对象中读取值,则不需要"ref"关键字,因为Message是引用类型.

void SomeMethod(Message message)
{
    message.Headers.Add("Some Data");  // This should be fine?
}
Run Code Online (Sandbox Code Playgroud)

干杯

c# ref pass-by-reference

3
推荐指数
1
解决办法
334
查看次数

通过一个ref React访问几个元素

我想使用refs功能来访问多个元素。然后,我可以遍历的元素this.tabs。下面的代码不起作用,如何对其进行修复?我现在使用的解决方案是document.querySelectorAll('tabs'),但它似乎不适用于React。

class Comp extends React.Component {
  constructor(props) {
    super(props);
    
    this.tabs = React.createRef();
  }
  
  componentDidMount() {
    console.log(this.tabs);
  }


  render() {
    return (
      <div>
        <span class="tab" ref={this.tabs}>One</span>
        <span class="tab" ref={this.tabs}>Two</span>
        <span class="tab" ref={this.tabs}>Three</span>
      </div>
    );
  }
}

ReactDOM.render(
  <Comp />,
  document.getElementById('app')
);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>
Run Code Online (Sandbox Code Playgroud)

javascript ref reactjs react-dom

3
推荐指数
1
解决办法
2049
查看次数