순수 기능적 React 구성 요소에서 이벤트를 처리하는 방법

로프 즈

Cam Jackson 에 따르면 우리는 Redux를 사용하고 작고 상태 비 저장 기능적인 구성 요소를 작성해야합니다. 예를 들면 다음과 같습니다.

const ListView = ({items}) => (
    <ul>
        {items.map(item => <ItemView item={item}/>)}
    </ul>
)

const ItemView = ({item}) => (
    <li><a>{item.name}</a></li>
)

이제 마우스 클릭을 처리하고 클릭 한 항목을 수행하는 작업을 트리거한다고 가정합니다. 나는 이것이 이것을하는 아주 좋은 방법이라고 생각합니다.

const ListView = ({items, onItemClicked}) => {
    const _onClick = item => event => {
        event.preventDefault()
        onItemClicked(item)
    }
    return (
        <ul>
            {items.map(item => <ItemView item={item} onClick={_onClick(item)}/>)}
        </ul>
    )
}

const ItemView = ({item, onClick}) => (
    <li><a onClick={onClick}>{item.name}</a></li>
)

그러나 Esa-Matti Suuronen에 따르면 이것은 성능 저하를 유발하는 안티 패턴입니다.

분명히 ItemView컴포넌트 내부에서 이벤트를 처리하고 item. 그러나 렌더링 함수 내에서 함수를 생성하지 않으려면 클래스 구성 요소로 만들어야합니다.

이것은 매우 일반적인 패턴이며, 성능 문제를 일으키지 않고 기능적 구성 요소로 이것을 처리하는 간단한 방법을 찾고 싶습니다. 당신은 무엇을 제안합니까?

이렇게 할 수있는 방법이 없으면 기능 구성 요소를 전혀 사용할 수 없습니다. 자주 생각하지 않기 때문에 어느 시점에서 모든 기능 구성 요소를 클래스로 변환해야합니다.

로프 즈

좀 더 생각하고 나서 할 방법을 찾은 것 같아요. 더 많은 Redux 컨테이너가 필요하다는 것을 알고 있습니다. 주요 최상위 구성 요소뿐만 아니라 재사용 가능한 하위 구성 요소에도 적용됩니다.

위의 예는 다음과 같이 해결할 수 있습니다.

const ListView = ({items, onItemClicked}) => (
    <ul>
        {items.map(item => <ItemContainer item={item} onItemClicked={onItemClicked}/>)}
    </ul>
)

const ItemView = ({item, onClick}) => (
    <li><a onClick={onClick}>{item.name}</a></li>
)

const mapDispatch = (dispatch, {item, onItemClicked}) => ({
    onClick: (event) => {
        event.preventDefault()
        onItemClicked(item)
    }
})

const ItemContainer = connect(null, mapDispatch)(ItemView)

대부분의 경우 외부 구성 요소에서 내부로 콜백을 전달할 필요가 없습니다 ItemContainer..

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

react.js의 부모 구성 요소에서 자식 구성 요소의 이벤트 처리기 기능을 재정의하는 방법

분류에서Dev

선택된 자식 구성 요소에서만 작동하는 부모 구성 요소의 함수를 처리하는 적절한 React-ful 방법?

분류에서Dev

기능적 구성 요소를 사용하여 React에서 활성 클래스로 탭을 만드는 방법

분류에서Dev

Gatsby 또는 React 기능 구성 요소를 사용하여 데이터베이스에서 비동기 가져 오기를 처리하는 방법

분류에서Dev

React에서 재사용 가능한 구성 요소를 처리하는 방법은 무엇입니까?

분류에서Dev

앱에서 여러 구성 요소로 React 양식 상태를 전달하는 방법 (기능적)

분류에서Dev

React의 자식 구성 요소에서 onchange 이벤트로 부모 클래스 구성 요소의 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

React Native에서 Class 구성 요소를 기능 구성 요소로 변경하는 방법

분류에서Dev

React-native에서 ref를 사용하여 ListView 또는 기타 구성 요소에 이벤트 처리기를 프로그래밍 방식으로 추가 할 수 있습니까?

분류에서Dev

경고 : 마운트 해제 된 구성 요소에서는 React 상태 업데이트를 수행 할 수 없습니다. 기능적 구성 요소

분류에서Dev

React 기능 구성 요소에서 부실 상태를 피하는 방법

분류에서Dev

React Native 기능 구성 요소의 부모 구성 요소에서 자식 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

Axios.get 및 Render 구성 요소에서 기능 구성 요소를 동적으로 반환하는 방법

분류에서Dev

React에서 순수 HTML을 별도의 구성 요소로 동적으로로드하는 방법이 있습니까?

분류에서Dev

효소 / 모카 : 하위 구성 요소에서 onChange 이벤트를 발생시켜 반응 구성 요소 기능을 테스트하는 방법

분류에서Dev

React-기능 구성 요소를 사용할 때 .map 함수에 대한 소품을 전달하는 방법

분류에서Dev

React에서 후크가있는 기능적 구성 요소의 이벤트 핸들러

분류에서Dev

react-redux를 사용하여 기능적 구성 요소에서 액션 생성자를 호출하는 방법은 무엇입니까?

분류에서Dev

Typescript에서 React Stateless 기능 구성 요소를 작성하는 방법은 무엇입니까?

분류에서Dev

React Router-404 페이지에서 구성 요소를 숨기는 방법

분류에서Dev

단일 파일 Vue 구성 요소에서 클릭 이벤트를 처리하는 올바른 방법

분류에서Dev

자식에서 React 부모 기능 구성 요소의 함수 트리거

분류에서Dev

반응에서 순수 구성 요소를 shouldComponentUpdate로 대체하는 방법

분류에서Dev

선언적 구성 요소에서 onChange 이벤트 리스너를 만드는 방법은 무엇입니까?

분류에서Dev

Angular2 다른 구성 요소에서 클릭 이벤트에 대한 함수를 호출하는 방법

분류에서Dev

Form의 각 컨트롤에 이벤트 처리기를 추가하는 구성 요소를 만드는 방법은 무엇입니까?

분류에서Dev

Form의 각 컨트롤에 이벤트 처리기를 추가하는 구성 요소를 만드는 방법은 무엇입니까?

분류에서Dev

Angular 구성 요소에서 오류를 처리하는 방법

분류에서Dev

React에서 검색 가능한 구성 요소를 만드는 방법

Related 관련 기사

  1. 1

    react.js의 부모 구성 요소에서 자식 구성 요소의 이벤트 처리기 기능을 재정의하는 방법

  2. 2

    선택된 자식 구성 요소에서만 작동하는 부모 구성 요소의 함수를 처리하는 적절한 React-ful 방법?

  3. 3

    기능적 구성 요소를 사용하여 React에서 활성 클래스로 탭을 만드는 방법

  4. 4

    Gatsby 또는 React 기능 구성 요소를 사용하여 데이터베이스에서 비동기 가져 오기를 처리하는 방법

  5. 5

    React에서 재사용 가능한 구성 요소를 처리하는 방법은 무엇입니까?

  6. 6

    앱에서 여러 구성 요소로 React 양식 상태를 전달하는 방법 (기능적)

  7. 7

    React의 자식 구성 요소에서 onchange 이벤트로 부모 클래스 구성 요소의 함수를 호출하는 방법은 무엇입니까?

  8. 8

    React Native에서 Class 구성 요소를 기능 구성 요소로 변경하는 방법

  9. 9

    React-native에서 ref를 사용하여 ListView 또는 기타 구성 요소에 이벤트 처리기를 프로그래밍 방식으로 추가 할 수 있습니까?

  10. 10

    경고 : 마운트 해제 된 구성 요소에서는 React 상태 업데이트를 수행 할 수 없습니다. 기능적 구성 요소

  11. 11

    React 기능 구성 요소에서 부실 상태를 피하는 방법

  12. 12

    React Native 기능 구성 요소의 부모 구성 요소에서 자식 함수를 호출하는 방법은 무엇입니까?

  13. 13

    Axios.get 및 Render 구성 요소에서 기능 구성 요소를 동적으로 반환하는 방법

  14. 14

    React에서 순수 HTML을 별도의 구성 요소로 동적으로로드하는 방법이 있습니까?

  15. 15

    효소 / 모카 : 하위 구성 요소에서 onChange 이벤트를 발생시켜 반응 구성 요소 기능을 테스트하는 방법

  16. 16

    React-기능 구성 요소를 사용할 때 .map 함수에 대한 소품을 전달하는 방법

  17. 17

    React에서 후크가있는 기능적 구성 요소의 이벤트 핸들러

  18. 18

    react-redux를 사용하여 기능적 구성 요소에서 액션 생성자를 호출하는 방법은 무엇입니까?

  19. 19

    Typescript에서 React Stateless 기능 구성 요소를 작성하는 방법은 무엇입니까?

  20. 20

    React Router-404 페이지에서 구성 요소를 숨기는 방법

  21. 21

    단일 파일 Vue 구성 요소에서 클릭 이벤트를 처리하는 올바른 방법

  22. 22

    자식에서 React 부모 기능 구성 요소의 함수 트리거

  23. 23

    반응에서 순수 구성 요소를 shouldComponentUpdate로 대체하는 방법

  24. 24

    선언적 구성 요소에서 onChange 이벤트 리스너를 만드는 방법은 무엇입니까?

  25. 25

    Angular2 다른 구성 요소에서 클릭 이벤트에 대한 함수를 호출하는 방법

  26. 26

    Form의 각 컨트롤에 이벤트 처리기를 추가하는 구성 요소를 만드는 방법은 무엇입니까?

  27. 27

    Form의 각 컨트롤에 이벤트 처리기를 추가하는 구성 요소를 만드는 방법은 무엇입니까?

  28. 28

    Angular 구성 요소에서 오류를 처리하는 방법

  29. 29

    React에서 검색 가능한 구성 요소를 만드는 방법

뜨겁다태그

보관