React Hooks-여러 동적 구성 요소와 부모 상태 공유

Zhunder

저는 현재 Hooks로 React App을 만들고 있습니다. 어딘가에서 데이터를로드하고 한편으로는 데이터를 표시하고 다른 한편으로는 데이터를 대체하는 구성 요소 ( Clicker, ClickerDisplay )를 동적으로 생성 하는 구성 요소 ( View )가 있습니다.

앱은 기본적으로 작동하지만 내 관심사는 그것 성능 입니다. 내 상태는 100ms마다 업데이트되며 변경시 모든 것이 다시 렌더링되면 큰 오버 헤드가 될 것입니다.

변경해야하는 구성 요소 만 다시 렌더링 할 수 있습니까?

나에게 매우 추한 또 다른 것은 내 상태를 업데이트하는 방법입니다. setState([...state]);더 나은 방법이 있습니까?

사이드 노트 :

내 예제 코드에서 id는 현재 항목 속성을 하위 구성 요소로만 전달하고 있지만 전체 항목을 하위 구성 요소로 전달할 계획입니다.

또한 앱의 상태를 빌드하고 하나의 큰 JSON 개체에 저장해야하므로 상위 구성 요소에 기본 상태유지하고 싶습니다 .

데이터

//Some Random Data
const things = [
    {
        "id": 0,
        "name": "thing 1",
    },
    {
        "id": 1,
        "name": "thing 2",
    },
    {
        "id": 2,
        "name": "thing 3",
    }
];

View.js

export default function View(props) {

    const tmp = things.map(item => {
        return { ...item, amount: 0 };
    });

    const [state, setState] = useState(tmp);

    //alternates the amount and updates the state
    function updateAmount(item, newAmount) {
        item.amount = newAmount;
        setState([...state]);
    }

    function createClicker(item) {
        const { name, amount } = item;
        return (<Clicker
            name={name}
            amount={amount}
            clicked={() => updateAmount(item, amount + 1)} />
        );
    }

    function createClickerDisplay(item) {
        const { name, amount } = item;
        return (<ClickerDisplay
            name={name}
            amount={amount} />
        );
    }

    return (
        <ul>
            {state.map(item =>
                <li>
                    {createClicker(item)} = {createClickerDisplay(item)}
                </li>
            )}
        </ul>
    );

}

Clicker.js

//component to alternate data
function Clicker(props) {
    const { clicked, name, amount } = props;
    return <button onClick={() => clicked(name)}>{name}: {amount}</button>;
}

ClickerDisplay.js

//component to display data
function ClickerDisplay(props) {
    const { name, amount } = props;
    return <span>{name}: {amount}</span>;
}
가스 센 루하 이치

상태 및 소품의 특정 변경 사항을 기반으로 조건부로 다시 렌더링하도록 구성되지 않은 경우 React 구성 요소는 모든 라이프 사이클에서 다시 렌더링됩니다. 귀하의 경우 기능적 구성 요소를 사용하고 React.memo()있으므로 이러한 구성 요소를 메모하는 데 활용할 수 있습니다 . 즉, 전달 된 props 내부의 값이 변경되는 경우에만 렌더링됩니다. 복잡한 구조가있는 경우 기본 비교기는 얕은 비교 만 수행하지만주의해야합니다.

아래 스 니펫은 메모 된 구성 요소의 사용을 보여주고 클릭 이벤트 핸들러의 일부로 수행중인 상태 변형을 해결합니다.

const things = [
    { "id": 0, "name": "thing 1" },
    { "id": 1, "name": "thing 2" },
    { "id": 2, "name": "thing 3"}
];

function Clicker({ clicked, name, amount }) {
    return <button onClick={() => clicked(name)}>{name}: {amount}</button>;
}

// Memoized component that only updates when its simple props change
const ClickerDisplayMemoized = React.memo(function ClickerDisplay(props) {
    const { name, amount, index } = props;
    console.log(`Updating ClickerDisplay ${index + 1}`);
    return <span>{name}: {amount}</span>;
});

function View() {
    const thingsWithAmounts = things.map((item) => ({ ...item, amount: 0 }));
    const [state, setState] = React.useState(thingsWithAmounts);

    // Updated callback that avoids state mutation
    function updateAmount(index, newAmount) {
        setState(state.map((item, i) => ({
            ...item,
            amount: (i === index ? newAmount : item.amount)
        })));
    }

    const createClicker = ({ name, amount }, index) => (
        <Clicker name={name} amount={amount}
                 clicked={() => updateAmount(index, amount + 1)} />
    );
    const createClickerDisplay = ({ name, amount }, index) => (
        <ClickerDisplayMemoized name={name} amount={amount} index={ index } />
    );

    return (
        <ul>
            {state.map((item, i) => (
                // this component needs a key as it's part of a map()
                <li key={ i }>
                    {createClicker(item, i)} = {createClickerDisplay(item, i)}
                </li>
            ))}
        </ul>
    );
}

ReactDOM.render(<View />, document.getElementById('root'));
/* this is just so the console in this snippet doesn't cover the components */
.as-console-wrapper { max-height: 50% !important; }
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

React Hooks-여러 동적 구성 요소와 부모 상태 공유

분류에서Dev

React Hooks : 후크 상태를 부모 구성 요소로 다시 전달

분류에서Dev

React hooks-부모 구성 요소에서 재설정 상태 전달

분류에서Dev

React Hooks (Rendering Arrays)-매핑 된 자식의 참조를 포함하는 부모 구성 요소와 자식 상태를 포함하는 부모 구성 요소

분류에서Dev

Promise Hooks React JS를 사용하여 구성 요소 외부에서 상태가 업데이트되는지 추적합니다.

분류에서Dev

여러 모듈에서 공유되는 일반 / 동적 구성 요소

분류에서Dev

React JSX 구성 요소의 상태를 동적으로 변경합니다. 모범 사례 및 이유

분류에서Dev

UseState React Hook을 사용하여 자식 구성 요소에서 부모 구성 요소 상태 업데이트

분류에서Dev

React-Hooks-여러 버튼-누른 버튼의 ID를 부모 구성 요소에 전달하는 방법

분류에서Dev

React Hooks useState-권장되는 것은 구성 요소 당 하나의 상태 또는 여러 상태가 있습니까?

분류에서Dev

상태를 공유하는 React 구성 요소 업데이트

분류에서Dev

React hooks : 함수 구성 요소 내부의 상태를 업데이트 할 수 없습니다.

분류에서Dev

상태에 따라 동적 React Route 구성 요소 만들기

분류에서Dev

여러 React 구성 요소에서 JavaScript 클래스 공유

분류에서Dev

React : 비동기 데이터로 부모에서 자식 구성 요소 상태 업데이트

분류에서Dev

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

분류에서Dev

React Context 및 Hooks를 사용하여 부모에서 자식 구성 요소를 재설정하는 방법

분류에서Dev

React Hooks Const 구성 요소와 기능 구성 요소

분류에서Dev

React 기능적 구성 요소를 사용하여 부모 구성 요소의 내부 기능 변경

분류에서Dev

상태를 사용하여 다른 React 구성 요소로 이동

분류에서Dev

react native-반응 후크를 사용하여 하위 구성 요소의 상태 업데이트를 부모 구성 요소에 알립니 까?

분류에서Dev

React에서 자식 구성 요소의 상태를 사용하여 부모 구성 요소를 업데이트하는 방법은 무엇입니까?

분류에서Dev

동적으로 생성 된 하위 구성 요소에서 상태 변경-React

분류에서Dev

React Hooks를 사용한 동적 상태

분류에서Dev

React의 자식 구성 요소에서 부모 상태 변경 (Redux 없음)

분류에서Dev

React : 다른 유형의 자식 구성 요소를 부모 구성 요소에 동적으로 추가하는 방법은 무엇입니까?

분류에서Dev

기능적 구성 요소의 React js 설정 상태

분류에서Dev

부모 상태에 액세스하여 구성 요소 및 자식 구성 요소를 올바르게 사용

분류에서Dev

React : 탭 콘텐츠의 로컬 구성 요소 상태 유지

Related 관련 기사

  1. 1

    React Hooks-여러 동적 구성 요소와 부모 상태 공유

  2. 2

    React Hooks : 후크 상태를 부모 구성 요소로 다시 전달

  3. 3

    React hooks-부모 구성 요소에서 재설정 상태 전달

  4. 4

    React Hooks (Rendering Arrays)-매핑 된 자식의 참조를 포함하는 부모 구성 요소와 자식 상태를 포함하는 부모 구성 요소

  5. 5

    Promise Hooks React JS를 사용하여 구성 요소 외부에서 상태가 업데이트되는지 추적합니다.

  6. 6

    여러 모듈에서 공유되는 일반 / 동적 구성 요소

  7. 7

    React JSX 구성 요소의 상태를 동적으로 변경합니다. 모범 사례 및 이유

  8. 8

    UseState React Hook을 사용하여 자식 구성 요소에서 부모 구성 요소 상태 업데이트

  9. 9

    React-Hooks-여러 버튼-누른 버튼의 ID를 부모 구성 요소에 전달하는 방법

  10. 10

    React Hooks useState-권장되는 것은 구성 요소 당 하나의 상태 또는 여러 상태가 있습니까?

  11. 11

    상태를 공유하는 React 구성 요소 업데이트

  12. 12

    React hooks : 함수 구성 요소 내부의 상태를 업데이트 할 수 없습니다.

  13. 13

    상태에 따라 동적 React Route 구성 요소 만들기

  14. 14

    여러 React 구성 요소에서 JavaScript 클래스 공유

  15. 15

    React : 비동기 데이터로 부모에서 자식 구성 요소 상태 업데이트

  16. 16

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

  17. 17

    React Context 및 Hooks를 사용하여 부모에서 자식 구성 요소를 재설정하는 방법

  18. 18

    React Hooks Const 구성 요소와 기능 구성 요소

  19. 19

    React 기능적 구성 요소를 사용하여 부모 구성 요소의 내부 기능 변경

  20. 20

    상태를 사용하여 다른 React 구성 요소로 이동

  21. 21

    react native-반응 후크를 사용하여 하위 구성 요소의 상태 업데이트를 부모 구성 요소에 알립니 까?

  22. 22

    React에서 자식 구성 요소의 상태를 사용하여 부모 구성 요소를 업데이트하는 방법은 무엇입니까?

  23. 23

    동적으로 생성 된 하위 구성 요소에서 상태 변경-React

  24. 24

    React Hooks를 사용한 동적 상태

  25. 25

    React의 자식 구성 요소에서 부모 상태 변경 (Redux 없음)

  26. 26

    React : 다른 유형의 자식 구성 요소를 부모 구성 요소에 동적으로 추가하는 방법은 무엇입니까?

  27. 27

    기능적 구성 요소의 React js 설정 상태

  28. 28

    부모 상태에 액세스하여 구성 요소 및 자식 구성 요소를 올바르게 사용

  29. 29

    React : 탭 콘텐츠의 로컬 구성 요소 상태 유지

뜨겁다태그

보관