래퍼를 사용하여 버튼의 토글을 제어하는 방법

ncesar

나는 토글 버튼을 짓고 있어요 및 사양은 토글 버튼의 그룹은 한 번의 클릭 (수 있도록 동작을해야한다고 하더군요 예 참조 )과 여러 번의 클릭으로 ( 예 참조 ).

구현할 논리가 많지 않기 때문에 다중 클릭은 괜찮지 만 한 번의 클릭은 나에게 매우 어렵습니다. 한 번의 클릭을 사용하는 주요 아이디어는 버튼을 토글하고 다른 버튼을 토글하려고하면 이전 버튼은 상태를 잃고 pressed클릭 한 버튼은 버튼을 가져야한다는 것입니다. pressed사실, ToggleButton을 다른 CSS가 있습니다.

이것은 내 토글 버튼 구성 요소입니다.

const ToggleButton = props => {
  const { onClick, value, ...other } = props;
  const [pressed, setPressed] = useState(true);
  const renderPressedButton = () => {
    setPressed(!pressed);
    if (onClick) {
      onClick();
    }
  };
  return (
    <StyledToggleButton
      className={!pressed ? 'pressed' : null}
      pressed={pressed}
      data-value={value}
      {...other}
      onClick={renderPressedButton}
    />
  );
};

그리고 이것은 내 래퍼입니다 (atm 나는 내가 클릭하는 클래스 만 얻습니다).

const onClickHandler = e => {
  const index = e.target.closest('.pressed');
  // console.log(index);
  // console.log('classe: ', e.target.className);
  if (index) {
    console.log('its pressed!');
  }
};

const ToggleButtonGroup = props => {
  const { ...other } = props;
  return <StyledToggleButtonGroup onClick={onClickHandler} {...other} />;
};

Context API를 사용하거나 내 renderPressedButton논리를 내 래퍼 로 옮겨야한다고 생각합니다 . 누구나 아이디어가 있습니까?

그리고 이것이 내가 구성 요소를 사용할 계획입니다.

<ToggleButtonGroup singleClick>
     <ToggleButton>One</ToggleButton>
     <ToggleButton>Two</ToggleButton>
</ToggleButtonGroup>
Easwar

상태를 ToggleButtonGroup. 토글 된 인덱스 목록을 ToggleButton유지하고 완전히 상태 비 저장 상태 유지 하기 위해 부울을 prop으로 제공합니다 . 이렇게하면 클릭 ToggleButtonToggleButtonGroup기반으로 각각을 개별적 으로 제어 할 수 있습니다 .

function ToggleButtonGroup({ singleClick, children }) {
  const [checked, setChecked] = React.useState([]);

  const handleClick = event => {
    // event.target should have your clicked checbox reference
    const index = event.target.dataset.index;

    if (singleClick) {
      setChecked([index]);
    } else {
      if (checked.includes(index)) {
        setChecked(checked.filter(eachIndex => eachIndex !== index));
      } else {
        setChecked([...checked, index]);
      }
    }
  };

  return (
    <div onClick={handleClick}>
      {React.Children.map(children, (child, index) => {
        return React.cloneElement(child, {
          dataIndex: index,
          pressed: checked.includes(index)
        });
      })}
    </div>
  );
}



function ToggleButton({ dataIndex, pressed, ...rest }) {
  return <div data-index={dataIndex} className={!pressed ? 'pressed' : null} {...rest} />;
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

의사 CSS 전환을 사용하여 활성 토글 버튼의 CSS를 변경하는 방법

분류에서Dev

Appium 및 Java를 사용하여 토글 버튼을 클릭하는 방법은 무엇입니까?

분류에서Dev

jquery html () 메서드를 사용하여 토글 버튼 (more / less)을 얻는 방법

분류에서Dev

Angular-Angular Material의 토글 버튼을 재현하는 방법

분류에서Dev

토글 버튼을 재사용하는 방법

분류에서Dev

버튼을 사용하여 2 개의 차트를 전환하는 방법

분류에서Dev

Slack API를 사용하여 Slack의 버튼 색상을 설정하는 방법

분류에서Dev

하나의 버튼을 사용하여 Javascript를 사용하여 편집 및 저장하는 방법

분류에서Dev

Android Studio를 사용하여 두 개의 Android 버튼을 만드는 방법

분류에서Dev

ListViewItem의 버튼을 사용하여 ListView에서 개체를 삭제하는 방법은 무엇입니까?

분류에서Dev

Struts2를 사용하여 두 개의 다른 버튼에서 다른 작업을 제출하는 방법

분류에서Dev

토글 버튼을 사용하여 반작용 스프링으로 슬라이딩 카트를 애니메이션하는 방법

분류에서Dev

jquery를 사용하여 제출 버튼을 비활성화하는 방법

분류에서Dev

jquery를 사용하여 제출 버튼을 비활성화하는 방법

분류에서Dev

제약 조건을 사용하여 버튼을 UITableViewCell 너비의 절반으로 만드는 방법 (스토리 보드 또는 프로그래밍 방식)

분류에서Dev

지침을 사용하여 제한된 버튼 또는 이미지의 너비와 높이를 얻는 방법

분류에서Dev

토글 버튼을 통해 VBA를 사용하여 차트 생성 / 삭제

분류에서Dev

JQuery를 사용하여 동일한 클래스의 버튼에서 값을 가져 오는 방법

분류에서Dev

공통 수퍼 클래스를 사용하여 객체 간의 동등성을 테스트하는 방법

분류에서Dev

클릭 즉시 클래스를 토글하는 방법 (마우스 버튼을 놓은 후가 아님)

분류에서Dev

codeigniter의 버튼을 사용하여 다른 페이지를 방문하거나 이동하는 방법

분류에서Dev

배치를 사용하여 USB 포트의 전원을 제어하는 방법

분류에서Dev

MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

분류에서Dev

MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

분류에서Dev

JavaScript를 사용하여 div의 이동을 제어하는 방법

분류에서Dev

jQuery를 사용하여 요청간에 메뉴 토글 버튼의 상태를 저장하는 방법은 무엇입니까?

분류에서Dev

라디오 버튼을 사용하여 angularjs를 사용하여 테이블의 행을 삭제하는 방법은 무엇입니까?

분류에서Dev

jQuery-on ()을 사용하여 다른 객체를 토글하면서 버튼의 텍스트 변경

분류에서Dev

토글 버튼을 사용하여 산점도에서 레이블을 켜거나 끄는 방법

Related 관련 기사

  1. 1

    의사 CSS 전환을 사용하여 활성 토글 버튼의 CSS를 변경하는 방법

  2. 2

    Appium 및 Java를 사용하여 토글 버튼을 클릭하는 방법은 무엇입니까?

  3. 3

    jquery html () 메서드를 사용하여 토글 버튼 (more / less)을 얻는 방법

  4. 4

    Angular-Angular Material의 토글 버튼을 재현하는 방법

  5. 5

    토글 버튼을 재사용하는 방법

  6. 6

    버튼을 사용하여 2 개의 차트를 전환하는 방법

  7. 7

    Slack API를 사용하여 Slack의 버튼 색상을 설정하는 방법

  8. 8

    하나의 버튼을 사용하여 Javascript를 사용하여 편집 및 저장하는 방법

  9. 9

    Android Studio를 사용하여 두 개의 Android 버튼을 만드는 방법

  10. 10

    ListViewItem의 버튼을 사용하여 ListView에서 개체를 삭제하는 방법은 무엇입니까?

  11. 11

    Struts2를 사용하여 두 개의 다른 버튼에서 다른 작업을 제출하는 방법

  12. 12

    토글 버튼을 사용하여 반작용 스프링으로 슬라이딩 카트를 애니메이션하는 방법

  13. 13

    jquery를 사용하여 제출 버튼을 비활성화하는 방법

  14. 14

    jquery를 사용하여 제출 버튼을 비활성화하는 방법

  15. 15

    제약 조건을 사용하여 버튼을 UITableViewCell 너비의 절반으로 만드는 방법 (스토리 보드 또는 프로그래밍 방식)

  16. 16

    지침을 사용하여 제한된 버튼 또는 이미지의 너비와 높이를 얻는 방법

  17. 17

    토글 버튼을 통해 VBA를 사용하여 차트 생성 / 삭제

  18. 18

    JQuery를 사용하여 동일한 클래스의 버튼에서 값을 가져 오는 방법

  19. 19

    공통 수퍼 클래스를 사용하여 객체 간의 동등성을 테스트하는 방법

  20. 20

    클릭 즉시 클래스를 토글하는 방법 (마우스 버튼을 놓은 후가 아님)

  21. 21

    codeigniter의 버튼을 사용하여 다른 페이지를 방문하거나 이동하는 방법

  22. 22

    배치를 사용하여 USB 포트의 전원을 제어하는 방법

  23. 23

    MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

  24. 24

    MapRoute를 사용하여 Html.ActionLink의 동작을 제어하는 방법

  25. 25

    JavaScript를 사용하여 div의 이동을 제어하는 방법

  26. 26

    jQuery를 사용하여 요청간에 메뉴 토글 버튼의 상태를 저장하는 방법은 무엇입니까?

  27. 27

    라디오 버튼을 사용하여 angularjs를 사용하여 테이블의 행을 삭제하는 방법은 무엇입니까?

  28. 28

    jQuery-on ()을 사용하여 다른 객체를 토글하면서 버튼의 텍스트 변경

  29. 29

    토글 버튼을 사용하여 산점도에서 레이블을 켜거나 끄는 방법

뜨겁다태그

보관