라디오 버튼에 초점을 맞출 때 React useRef / forwardRef가 예상대로 작동하지 않음

새긴 ​​금

여기에 약간의 데모를 만들었습니다 : https://codesandbox.io/s/bold-meitner-r3wzq?file=/src/App.js

버튼을 클릭하여 첫 번째 라디오 버튼을 표시하고 초점을 맞추면 라디오 스타일이 적용되지 않습니다. 하지만 바로 뒤에 스페이스를 누르면 오른쪽 요소에 초점이 맞춰집니다.

이상한 점은 1ms 시간 초과 후 초점을 맞추면 예상대로 작동한다는 것입니다. 분명히 이것은 해결책 이라기보다는 해킹에 가깝습니다.

여기서 정말 간단한 것을 놓치고있는 것 같습니다. 어떤 도움이라도 좋을 것입니다!

감사!!

또는 복제에 필요한 모든 코드입니다.

import React from "react";
import styled from "styled-components";
import "./styles.css";

const { useRef, forwardRef, useState } = React;

const Button = ({ onClick }) => (
  <button onClick={onClick}>Click me to show and focus radio buttons</button>
);

const Fieldset = styled.fieldset`
  display: ${props => (props.isVisible ? "block" : "none")};

  input {
    :focus {
      outline: 5px solid red;
    }
  }
`;

const RadioButtons = forwardRef(({ isVisible, legend }, ref) => (
  <Fieldset isVisible={isVisible}>
    <legend>{legend}</legend>
    <label for="one">One</label>
    <input ref={ref} type="radio" id="one" name="radios" />
    <label for="two">Two</label>
    <input type="radio" id="two" name="radios" />
  </Fieldset>
));

export default function App() {
  const [isVisible, setIsVisible] = useState(false);
  const inputRef = useRef();

  const focusInput = () => {
    setIsVisible(true);

    // This doesn't work as expected
    inputRef.current.focus();

    // This does - But it definitely doesn't feel like a "solution"
    // setTimeout(() => {
    //   inputRef.current.focus();
    // }, 1);
  };

  return (
    <>
      <Button onClick={focusInput} />
      <RadioButtons
        isVisible={isVisible}
        ref={inputRef}
        legend="Radio Legend"
      />
    </>
  );
}


Rostyslav

다음 useEffect과 같이 후크 내부에 포커스 로그인을 배치해야 합니다.

export default function App() {
  const [isVisible, setIsVisible] = useState(false);
  const inputRef = useRef();

  const focusInput = () => {
    setIsVisible(true);
  };

  React.useEffect(() => {
    if (isVisible) {
      inputRef.current.focus();
    }
  }, [isVisible]);

  return (
    <>
      <Button onClick={focusInput} />
      <RadioButtons
        isVisible={isVisible}
        ref={inputRef}
        legend="Radio Legend"
      />
    </>
  );
}

여기에 링크가 있습니다

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

CSS : 요소가 .focus ()로 초점을 맞출 때 초점 선택기가 작동하지 않습니다.

분류에서Dev

자바 스크립트에서 동적으로 행을 추가 할 때 라디오 버튼 기능이 제대로 작동하지 않음

분류에서Dev

버튼을 클릭 할 때 인형이 예상대로 작동하지 않음

분류에서Dev

JQuery : 브라우저가 초점이 맞지 않을 때 초점

분류에서Dev

Angular 2 : 라디오 버튼이 예상대로 작동하지 않음

분류에서Dev

CSS가 적용될 때 라디오 버튼 클릭이 작동하지 않음

분류에서Dev

radiogroup.setOnCheckedListener가 예상대로 작동하지 않습니다. (라디오 버튼 색상 변경)

분류에서Dev

초점을 맞출 수없는 PopupWindow에서 Android ListView의 OnItemClickListener가 작동하지 않음

분류에서Dev

Internet Explorer Edge에서 라디오 버튼 이미지가 제대로 작동하지 않음

분류에서Dev

Firefox가 라디오 버튼에 CSS를로드하지 않음

분류에서Dev

값을 수정할 때 array_walk가 예상대로 작동하지 않음

분류에서Dev

값을 전달할 때 iOS Segue가 예상대로 작동하지 않음

분류에서Dev

df1 빼기 df2 레코드가 순서가 맞지 않을 때 Pyspark에서 예상대로 작동하지 않습니다.

분류에서Dev

라디오 버튼이 작동하지 않을 때 경고 상자를 표시하는 jQuery

분류에서Dev

버튼에 초점을 맞추는 변경 이벤트가 갑자기 작동하지 않았습니다.

분류에서Dev

Android 라디오 버튼이 제대로 작동하지 않음

분류에서Dev

setChecked 라디오 버튼이 제대로 작동하지 않음

분류에서Dev

React에서 작동하지 않는 라디오 버튼 확인

분류에서Dev

CSS-오버플로가 예상대로 작동하지 않음

분류에서Dev

라디오 버튼은 form-for가있는 Rails에서 초점을 맞출 수 없습니다.

분류에서Dev

Flutter :-키보드가 초점을 맞출 때 레이아웃이 하단에 오버플로되도록합니다.

분류에서Dev

브라우저가 초점이 맞지 않을 때 웹 사이트에서 클립 보드로 복사

분류에서Dev

라디오 버튼이 작동하지 않음-상태가 변경되지 않음

분류에서Dev

useRef () 오류 : 텍스트 영역에 초점을 시도하지 않을 때 세트 속성은 null로 사용할 수 있습니다

분류에서Dev

마우스 오버시 Mouseleave가 예상대로 작동하지 않음

분류에서Dev

ng-bootstrap 라디오 버튼에 대한 ngModel 바인딩은 jQuery 스크립트가 추가 될 때 Angular 2에서 작동하지 않습니다.

분류에서Dev

별도의 하위 구성 요소에있는 텍스트 입력에 다음에 초점을 맞출 때 키보드가 지속되지 않습니다.

분류에서Dev

Div를 추가 할 때 라디오 버튼 애니메이션이 작동하지 않음

분류에서Dev

VLC : 초점이 맞지 않을 때 항상 상단에 투명

Related 관련 기사

  1. 1

    CSS : 요소가 .focus ()로 초점을 맞출 때 초점 선택기가 작동하지 않습니다.

  2. 2

    자바 스크립트에서 동적으로 행을 추가 할 때 라디오 버튼 기능이 제대로 작동하지 않음

  3. 3

    버튼을 클릭 할 때 인형이 예상대로 작동하지 않음

  4. 4

    JQuery : 브라우저가 초점이 맞지 않을 때 초점

  5. 5

    Angular 2 : 라디오 버튼이 예상대로 작동하지 않음

  6. 6

    CSS가 적용될 때 라디오 버튼 클릭이 작동하지 않음

  7. 7

    radiogroup.setOnCheckedListener가 예상대로 작동하지 않습니다. (라디오 버튼 색상 변경)

  8. 8

    초점을 맞출 수없는 PopupWindow에서 Android ListView의 OnItemClickListener가 작동하지 않음

  9. 9

    Internet Explorer Edge에서 라디오 버튼 이미지가 제대로 작동하지 않음

  10. 10

    Firefox가 라디오 버튼에 CSS를로드하지 않음

  11. 11

    값을 수정할 때 array_walk가 예상대로 작동하지 않음

  12. 12

    값을 전달할 때 iOS Segue가 예상대로 작동하지 않음

  13. 13

    df1 빼기 df2 레코드가 순서가 맞지 않을 때 Pyspark에서 예상대로 작동하지 않습니다.

  14. 14

    라디오 버튼이 작동하지 않을 때 경고 상자를 표시하는 jQuery

  15. 15

    버튼에 초점을 맞추는 변경 이벤트가 갑자기 작동하지 않았습니다.

  16. 16

    Android 라디오 버튼이 제대로 작동하지 않음

  17. 17

    setChecked 라디오 버튼이 제대로 작동하지 않음

  18. 18

    React에서 작동하지 않는 라디오 버튼 확인

  19. 19

    CSS-오버플로가 예상대로 작동하지 않음

  20. 20

    라디오 버튼은 form-for가있는 Rails에서 초점을 맞출 수 없습니다.

  21. 21

    Flutter :-키보드가 초점을 맞출 때 레이아웃이 하단에 오버플로되도록합니다.

  22. 22

    브라우저가 초점이 맞지 않을 때 웹 사이트에서 클립 보드로 복사

  23. 23

    라디오 버튼이 작동하지 않음-상태가 변경되지 않음

  24. 24

    useRef () 오류 : 텍스트 영역에 초점을 시도하지 않을 때 세트 속성은 null로 사용할 수 있습니다

  25. 25

    마우스 오버시 Mouseleave가 예상대로 작동하지 않음

  26. 26

    ng-bootstrap 라디오 버튼에 대한 ngModel 바인딩은 jQuery 스크립트가 추가 될 때 Angular 2에서 작동하지 않습니다.

  27. 27

    별도의 하위 구성 요소에있는 텍스트 입력에 다음에 초점을 맞출 때 키보드가 지속되지 않습니다.

  28. 28

    Div를 추가 할 때 라디오 버튼 애니메이션이 작동하지 않음

  29. 29

    VLC : 초점이 맞지 않을 때 항상 상단에 투명

뜨겁다태그

보관