상태에 따라 반응 페이지에 동적으로 구성 요소 추가

이샨 미나

그래서 Udemy를 ​​통해 반응을 배우고 있으며 강사는 상태를 사용하여 햄버거 재료의 내용을 동적으로 렌더링하기 위해이 코드를 작성했습니다. 기본적으로 그는 상태 객체를 배열로 변환하고이를 사용하여 물건을 렌더링합니다.

import React from "react";
import classes from "./Burger.css";
import BurgerIngredient from "./BurgerIngredients/BurgerIngr";

const burger = (props) => {
  const transformedIngr = Object.keys(props.ingredients).map((igKey) => {
    return [...Array(props.ingredients[igKey])].map((_, i) => {
      return <BurgerIngredient key={igKey + i} type={igKey} />;
    });
  });

  return (
    <div className={classes.Burger}>
      <BurgerIngredient type="bread-top" />
      {transformedIngr}
      <BurgerIngredient type="bread-bottom" />
    </div>
  );
};

export default burger;

//Object.entries(props.ingredients).map((indexOne, indexTwo)

코드가 매우 복잡해 보이며 동일한 비디오를 여러 번 보아도 이해할 수 없습니다. 내 말은, 온라인에서 조사한 결과 다음을 사용하여 객체를 배열로 변환하는 더 좋은 방법이 있음을 알았습니다.

Object.entries(props.ingredients)

누구든지 기존 코드를 설명 할 수 있습니까 ? Object.entries 를 사용하여 더 쉽게 만들 수 있습니까? 또는 동일한 작업을 수행하는 다른 대체 방법이 있습니까?

BurgerBuilder.js

import React, { Component } from "react";
import Aux from "../../hoc/aux";
import Burger from "../../components/Burger/Burger";

class BurgerBuilder extends Component {
  state = {
    ingredients: {
      meat: 1,
      salad: 2,
      cheese: 1,
      bacon: 1,
    },
  };

  render() {
    return (
      <Aux>
        <Burger ingredients={this.state.ingredients} />
        <div>Controls</div>
      </Aux>
    );
  }
}

기본 BurgerBuilder 내보내기;

BurgerIngriedent.js

import React, { Component } from "react";
import Classes from "./original.css";
import PropTypes from "prop-types";

class BurgerIngredients extends Component {
  render() {
    let ingredient = null;

    switch (this.props.type) {
      case "bread-bottom":
        ingredient = <div className={Classes.BreadBottom}></div>;
        break;
      case "bread-top":
        ingredient = (
          <div className={Classes.BreadTop}>
            <div className={Classes.Seeds1}></div>;
            <div className={Classes.Seeds2}></div>;
          </div>
        );
        break;
      case "meat":
        ingredient = <div className={Classes.Meat}></div>;
        break;
      case "salad":
        ingredient = <div className={Classes.Salad}></div>;
        break;
      case "cheese":
        ingredient = <div className={Classes.Cheese}></div>;
        break;
      case "bacon":
        ingredient = <div className={Classes.Bacon}></div>;
        break;
      default:
        ingredient = null;
        break;
    }
    return ingredient;
  }
}

BurgerIngredients.propTypes = {
  type: PropTypes.string.isRequired,
};

export default BurgerIngredients;

감사합니다.

니콜라스 타워

누구든지 기존 코드를 설명 할 수 있습니까?

이 부분부터 시작하겠습니다.

Object.keys(props.ingredients)

이것은 객체를 키 배열로 바꾸는 데 사용됩니다. 그래서 그것은 ['meat', 'salad', 'cheese', 'bread'].

다음으로 문자열 배열을 매핑하여 다른 배열로 변환합니다. 새로운 배열에 무엇이 있을지 결정하는 함수는 다음과 같습니다.

(igKey) => {
    return [...Array(props.ingredients[igKey])].map((_, i) => {
      return <BurgerIngredient key={igKey + i} type={igKey} />;
    });
  }

압축을 풀기위한 첫 번째 부분은 이것이 목적이며 올바른 길이의 배열을 만드는 것입니다.

[...Array(props.ingredients[igKey])]

props.ingredients[igKey]주어진 키와 관련된 값을 얻을 것입니다. 키가 그래서 만약 'meat', 다음 props.ingredients[igKey]입니다 1. 또는 키가 'salad'이면 값은 2입니다.

그 번호를 손에 들고 그들은 다음 전화를 겁니다 Array(1)(예 :). 이것은 올바른 길이의 배열을 만듭니다. 그러나 문제가 있습니다. 배열 생성자가 작동하는 방식의 이상으로 인해이 배열을 호출하려고하면 .map제대로 작동하지 않습니다 (값을 변경할 수 없음). 따라서이 문제를 해결하기 위해 다음 작업은 배열의 복사본을 만드는 것입니다. [... ]부분이하는 일입니다.

이제 길이가 객체의 값과 같은 배열이 있습니다. 마지막으로 할 일은 그것에 대한 호출 맵과 일부 구성 요소를 만드는 것입니다. 이것이이 코드가하는 일입니다.

.map((_, i) => {
  return <BurgerIngredient key={igKey + i} type={igKey} />;
});

이 모든 작업이 완료되면 2 차원 배열이 생성됩니다. 외부 배열에는 각 성분에 대해 하나의 항목이 있고 내부 배열에는 성분 번호와 동일한 성분이 있습니다.

Object.entries를 사용하여 더 쉽게 만들 수 있습니까?

나는 그것이 어떤 중대한 변화를 가져올 것이라고 보지 않는다. 원하는 경우 Object.keys(with를 사용할 수 Object.entries(있지만 그 외에는 많이 변경되지 않습니다.

또는 동일한 작업을 수행하는 다른 대체 방법이 있습니까?

이 코드를 작성하는 방법에는 여러 가지가 있습니다. 일부는 제공된 예제보다 더 읽기 쉽지만 거의 모두 수행하려는 기본 작업이 동일합니다. 객체를 배열로 변환 한 다음 배열의 각 요소에 대해 올바른 배열을 만듭니다. 각 내부 배열에 대해 구성 요소를 만듭니다.

다음은 더 읽기 쉬운 명시 적 for 루프의 예입니다.

const transformedIngr = [];
for (let igKey in props.ingredients) {
  const components = [];
  for (let i = 0; i < props.ingredients[igKey]; i++) {
    components.push(<BurgerIngredient key={igKey + i} type={igKey} />);
  }
  transformedIngr.push(components);
}

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

반응에 다른 구성 요소를 동적으로 추가

분류에서Dev

React Typescript : 라우터 구성 요소 반응에 위치 상태 추가

분류에서Dev

동적으로 생성 된 반응 구성 요소에 애니메이션을 추가하는 방법

분류에서Dev

반응 구성 요소를 동일한 <div>에 동적으로 추가하는 가장 좋은 방법

분류에서Dev

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

분류에서Dev

웹 구성 요소 내부에 동적으로 요소 추가

분류에서Dev

소품 값에 따라 구성 요소 표시 반응

분류에서Dev

요청에서 얻은 순서에 따라 반응 구성 요소를 동적으로 정렬하는 방법은 무엇입니까?

분류에서Dev

동적으로 생성 된 구성 요소가 바로 아래 대신 페이지 끝에 추가됨

분류에서Dev

페이지를 새로 고치면 반응 구성 요소가 사라집니다 (반응 라우터 사용)

분류에서Dev

Vue3 동적으로 DOM에 구성 요소 추가

분류에서Dev

양식에 비동기 적으로 구성 요소 추가

분류에서Dev

동적으로 조각에 UI 구성 요소 추가

분류에서Dev

반응의 부모 구성 요소에 라디오 버튼 값 추가

분류에서Dev

콘텐츠 높이에 따라 동적으로 React 요소 추가

분류에서Dev

다른 구성 요소의 상태에 따라 React 구성 요소 가시성 변경

분류에서Dev

반응의 상위 경로 구성 요소에서로드 상태

분류에서Dev

컴퓨팅 상태가 다른 상태 속성에 따라 달라지는 반응 상태

분류에서Dev

HTML과 CSS로 구성된 간단한 웹 페이지에 반응 구성 요소를 추가하려면 어떻게해야합니까?

분류에서Dev

반응 : 클래스에서 상태가있는 기능 구성 요소로 변환

분류에서Dev

반응 : 클래스에서 상태가있는 기능 구성 요소로 변환

분류에서Dev

동적 경로에서 구성 요소 재로드 반응

분류에서Dev

페이지의 스크롤 가능한 구성 요소에서 InfiniteScroll 반응

분류에서Dev

반응 : Prop으로 전달 된 상태를 변수로 구성 요소에 할당하면 업데이트가 방지됩니까?

분류에서Dev

기능 구성 요소로 렌더링 후 액세스 상태에 반응

분류에서Dev

반응의 라우터에 반응 경로를 추가하면 빈 페이지가 생성됩니다.

분류에서Dev

반응 구성 요소에 CSS 클래스 추가 / 제거

분류에서Dev

반응에서 가져 오기 또는 구성 요소없이 이미지 src를 동적으로 할당하는 방법

분류에서Dev

HTML 페이지에 동적으로 요소 추가

Related 관련 기사

  1. 1

    반응에 다른 구성 요소를 동적으로 추가

  2. 2

    React Typescript : 라우터 구성 요소 반응에 위치 상태 추가

  3. 3

    동적으로 생성 된 반응 구성 요소에 애니메이션을 추가하는 방법

  4. 4

    반응 구성 요소를 동일한 <div>에 동적으로 추가하는 가장 좋은 방법

  5. 5

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

  6. 6

    웹 구성 요소 내부에 동적으로 요소 추가

  7. 7

    소품 값에 따라 구성 요소 표시 반응

  8. 8

    요청에서 얻은 순서에 따라 반응 구성 요소를 동적으로 정렬하는 방법은 무엇입니까?

  9. 9

    동적으로 생성 된 구성 요소가 바로 아래 대신 페이지 끝에 추가됨

  10. 10

    페이지를 새로 고치면 반응 구성 요소가 사라집니다 (반응 라우터 사용)

  11. 11

    Vue3 동적으로 DOM에 구성 요소 추가

  12. 12

    양식에 비동기 적으로 구성 요소 추가

  13. 13

    동적으로 조각에 UI 구성 요소 추가

  14. 14

    반응의 부모 구성 요소에 라디오 버튼 값 추가

  15. 15

    콘텐츠 높이에 따라 동적으로 React 요소 추가

  16. 16

    다른 구성 요소의 상태에 따라 React 구성 요소 가시성 변경

  17. 17

    반응의 상위 경로 구성 요소에서로드 상태

  18. 18

    컴퓨팅 상태가 다른 상태 속성에 따라 달라지는 반응 상태

  19. 19

    HTML과 CSS로 구성된 간단한 웹 페이지에 반응 구성 요소를 추가하려면 어떻게해야합니까?

  20. 20

    반응 : 클래스에서 상태가있는 기능 구성 요소로 변환

  21. 21

    반응 : 클래스에서 상태가있는 기능 구성 요소로 변환

  22. 22

    동적 경로에서 구성 요소 재로드 반응

  23. 23

    페이지의 스크롤 가능한 구성 요소에서 InfiniteScroll 반응

  24. 24

    반응 : Prop으로 전달 된 상태를 변수로 구성 요소에 할당하면 업데이트가 방지됩니까?

  25. 25

    기능 구성 요소로 렌더링 후 액세스 상태에 반응

  26. 26

    반응의 라우터에 반응 경로를 추가하면 빈 페이지가 생성됩니다.

  27. 27

    반응 구성 요소에 CSS 클래스 추가 / 제거

  28. 28

    반응에서 가져 오기 또는 구성 요소없이 이미지 src를 동적으로 할당하는 방법

  29. 29

    HTML 페이지에 동적으로 요소 추가

뜨겁다태그

보관