웹 프론트엔드 JS 튜토리얼 React로 TodoList를 구현하는 자세한 단계

React로 TodoList를 구현하는 자세한 단계

Dec 31, 2017 am 10:23 AM
react todolist 단계

이번에는 React를 사용하여 TodoList를 구현하는 세부 단계를 가져왔습니다. 이 기사에서는 자세한 분석을 제공합니다.

먼저 구현될 기능에 대해 이야기하겠습니다

(1) 작업을 추가할 수 있습니다.
(2) 완료된 작업과 완료되지 않은 작업은 색상으로 구분됩니다.
(3) 작업 추가, 작업 상태 수정, 작업 삭제 , 아래의 완료된 작업 수와 총 작업 수를 변경해야 합니다.

위는 구현되는 기능입니다.

2. 다음은 어떻게 디자인할까요?

(1) 작업 저장의 데이터 구조:

list: [{
      id: 0,
      name: '吃饭',
      status: 0
    }, {
      id: 1,
      name: '睡觉',
      status: 0
    }, {
      id: 2,
      name: '打豆豆',
      status : 0
    }]
로그인 후 복사

각 작업에는 고유한 ID, 작업 이름 및 작업 상태가 있으며 작업의 고유성을 식별하는 것 외에도 작업 ID를 키로 사용할 수도 있습니다. 목록 항목의 값입니다. React에서 목록을 사용할 때 목록의 각 항목에는 키 값이 있어야 하며, 이를 통해 각 목록 항목을 빠르게 찾을 수 있고 Diff 알고리즘을 실행할 때 불필요한 쿼리가 줄어들어 성능이 향상됩니다.

(2) 구성 요소 분할

TodoList 전체를 큰 구성 요소로

목록의 각 목록 항목(ListItem)을 구성 요소로

작업 추가 상자(대화 상자).

3. 구체적인 구현

ListItem 구현을 예로 들어보겠습니다.

각 개별 항목이 독립적이고 코드의 논리가 더 단순해지도록 목록 항목을 별도로 구성 요소로 나누어야 합니다. 재사용성과 유지관리가 더 쉬워질 것입니다.

물론, 똑똑하다면 다음과 같은 질문이 떠오를 것입니다. 각 Task의 상태가 변경되거나 Task의 추가 및 삭제, 완료된 작업 수 및 총 수가 변경되지만 각 ListItem은 독립적입니다. 모직물을 어떻게 구현하나요? 이때 상위 컴포넌트와 하위 컴포넌트 간의 통신이 사용됩니다.

저와 같은 React 초보자라면 Baidu에 부모와 자식 구성 요소 간의 통신 방법에 대해 설명하는 기사가 많이 있을 것입니다. 저의 간단하고 대략적인 이해에 대해 간단히 말씀드리겠습니다.

상태 데이터 변경을 정의하세요. 메소드를 props 형태로 하위 컴포넌트에 전달하고, 하위 컴포넌트에서 이벤트 처리 프로그램을 실행한 후, 특정 조건이 충족되면 상위 컴포넌트가 전달한 함수를 실행합니다.

구체적인 코드는 다음과 같습니다.

상위 컴포넌트의 코드:

import React, { Component } from 'react';
import ListItem from './listItem';
import Dialog from './dialog';
import './main.css';
  
class TodoList extends Component {
  constructor (props) {
    super(props);
      
    //初始任务列表
    this.state = {
      list: [{
        id: 0,
        name: '吃饭',
        status: 0
      }, {
        id: 1,
        name: '睡觉',
        status: 0
      }, {
        id: 2,
        name: '打豆豆',
        status : 0
      }],
      finished: 0
    };
  }
    
  //添加新任务,在组件中以props的形式传递给子组件
  addTask (newitem) {
    var allTask = this.state.list;
    allTask.push(newitem);
    this.setState({
      list: allTask
    });
  }
  //更新完成的任务,在组件中以props的形式传递给子组件
  updateFinished (todoItem) {
    var sum = 0;
    this.state.list.forEach( (item) => {
      if (item.id === todoItem.id) {
        item.status = todoItem.status;
      }
      if (item.status === 1) {
        sum++;
      }
    });
    this.setState({
      finished: sum
    });
  }
  
  //更新任务总数,在组件中以props的形式传递给子组件
  updateTotal (todoItem) {
    var obj = [], sum = 0;
    this.state.list.forEach((item) => {
      if (item.id !== todoItem.id) {
        obj.push(item);
        if (item.status === 1 ) {
          sum++;
        }
      }
    });
    this.setState({
      list: obj,
      finished: sum
    });
  }
  
  render () {
    return (
      <div className="container">
        <h1>TodoList</h1>
        <ul>
          { this.state.list.map ((item, index) =>
            <ListItem 
              item={item} 
              finishedChange={this.updateFinished.bind(this)} 
              totalChange={this.updateTotal.bind(this)}
              key={index}
            />
          )}
          <li>{this.state.finished}已完成 / {this.state.list.length}总数</li>
        </ul>
        <Dialog addNewTask={this.addTask.bind(this)} nums={this.state.list.length}/>
      </div>
    );
  }
}
  
export default TodoList;
로그인 후 복사

하위 컴포넌트의 코드:

import React, { Component } from &#39;react&#39;;
  
class ListItem extends Component {
  constructor (props) {
    super(props);
  
    this.handleFinished = this.handleFinished.bind(this);
    this.handleDelete = this.handleDelete.bind(this);
  } 
  
  handleFinished () {
    var status = this.props.item.status;
  
    status = (status === 0 ? 1 : 0);
  
    var obj = {
      id: this.props.item.id,
      name: this.props.item.name,
      status: status
    }
      
    this.props.finishedChange(obj); //执行父组件传来的方法
  }
  
  handleDelete () {
    this.props.totalChange(this.props.item); //执行父组件传来的方法
  }
  
  render () {
    const item = this.props.item;
  
    const unfinish = {
      backgroundColor: &#39;#DFFCB5&#39;,
      color: &#39;#2EB872&#39;,
    };
  
    const finish = {
      backgroundColor: &#39;#FFFA9D&#39;,
      color: &#39;#FF9A3C&#39;,
      textDecoration: &#39;line-through&#39;
    }
  
    var itemStyle = item.status === 0 ? unfinish : finish;
      
    return (
      <li key={item.id} style={itemStyle}>
        <span 
          onClick={this.handleFinished} 
          id={item.id}
          className="check-btn"
          style={{backgroundColor: item.status === 0 ? &#39;#fff&#39; : &#39;#A1EAFB&#39;}}
        ></span>
        <span>{ item.name }</span>
        <span onClick={this.handleDelete} className="delete-btn">删除</span>
      </li>
    );
  }
}
  
export default ListItem;
로그인 후 복사

위는 저와 같은 반응 초보자라면 완료하세요. writing 나는 당신이 React


위의 소개를 읽고 나면 방법을 마스터했다고 믿습니다. 더 흥미로운 정보를 보려면 PHP 중국어 웹 사이트의 다른 관련 기사를 주목하십시오!

관련 읽기:

vue를 사용하여 로그인 확인을 구현하는 방법

Vue의 사용자 정의 지침을 사용하여 드롭다운 메뉴를 완성하는 방법

jQuery를 사용하여 배열 중복 제거 및 정렬


위 내용은 React로 TodoList를 구현하는 자세한 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
<exp exp> 모호한 : 원정 33- 완벽한 크로마 촉매를 얻는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

최신 버전의 WeChat으로 업그레이드하는 단계(최신 버전의 WeChat으로 업그레이드하는 방법을 쉽게 익히세요) 최신 버전의 WeChat으로 업그레이드하는 단계(최신 버전의 WeChat으로 업그레이드하는 방법을 쉽게 익히세요) Jun 01, 2024 pm 10:24 PM

WeChat은 더 나은 사용자 경험을 제공하기 위해 지속적으로 새 버전을 출시하는 중국의 소셜 미디어 플랫폼 중 하나입니다. WeChat을 최신 버전으로 업그레이드하는 것은 가족 및 동료와 연락을 유지하고 친구와 연락을 유지하며 최신 개발 상황을 파악하는 데 매우 중요합니다. 1. 최신 버전의 기능과 개선 사항을 이해합니다. WeChat을 업그레이드하기 전에 최신 버전의 기능과 개선 사항을 이해하는 것이 매우 중요합니다. 성능 개선 및 버그 수정에 대해서는 WeChat 공식 웹사이트나 앱 스토어에서 업데이트 노트를 확인하여 새 버전에서 제공되는 다양한 새로운 기능에 대해 알아볼 수 있습니다. 2. 현재 WeChat 버전 확인 WeChat을 업그레이드하기 전에 현재 휴대폰에 설치된 WeChat 버전을 확인해야 합니다. WeChat 애플리케이션 "나"를 클릭하여 연 다음 "정보" 메뉴를 선택하면 현재 WeChat 버전 번호를 볼 수 있습니다. 3. 앱을 엽니다

이 Apple ID는 iTunes Store에서 아직 사용되지 않습니다. 수정 이 Apple ID는 iTunes Store에서 아직 사용되지 않습니다. 수정 Jun 10, 2024 pm 05:42 PM

AppleID를 사용하여 iTunesStore에 로그인하면 "이 AppleID는 iTunesStore에서 사용되지 않았습니다"라는 오류가 화면에 표시될 수 있습니다. 걱정할 오류 메시지는 없습니다. 다음 솔루션 세트에 따라 문제를 해결할 수 있습니다. 수정 1 – 배송 주소 변경 iTunes Store에 이 메시지가 나타나는 주된 이유는 AppleID 프로필에 올바른 주소가 없기 때문입니다. 1단계 – 먼저 iPhone에서 iPhone 설정을 엽니다. 2단계 – AppleID는 다른 모든 설정보다 우선해야 합니다. 그러니 열어보세요. 3단계 – 거기에서 “결제 및 배송” 옵션을 엽니다. 4단계 – Face ID를 사용하여 액세스 권한을 확인하세요. 단계

iPhone에서 Shazam 앱이 작동하지 않음: 수정 iPhone에서 Shazam 앱이 작동하지 않음: 수정 Jun 08, 2024 pm 12:36 PM

iPhone의 Shazam 앱에 문제가 있나요? Shazam은 노래를 듣고 노래를 찾는 데 도움을 줍니다. 하지만 Shazam이 제대로 작동하지 않거나 노래를 인식하지 못하는 경우 수동으로 문제를 해결해야 합니다. Shazam 앱을 복구하는 데 시간이 오래 걸리지 않습니다. 따라서 더 이상 시간을 낭비하지 않고 아래 단계에 따라 Shazam 앱 문제를 해결하세요. 수정 1 – 굵은 텍스트 기능 비활성화 iPhone의 굵은 텍스트로 인해 Shazam이 제대로 작동하지 않을 수 있습니다. 1단계 – iPhone 설정에서만 이 작업을 수행할 수 있습니다. 그러니 열어보세요. 2단계 – 다음으로 "디스플레이 및 밝기" 설정을 엽니다. 3단계 - "굵은 텍스트"가 활성화된 경우

iPhone 스크린샷이 작동하지 않음: 해결 방법 iPhone 스크린샷이 작동하지 않음: 해결 방법 May 03, 2024 pm 09:16 PM

iPhone에서 스크린샷 기능이 작동하지 않나요? 스크린샷을 찍는 것은 매우 쉽습니다. 볼륨 높이기 버튼과 전원 버튼을 동시에 누르고 휴대폰 화면을 잡기만 하면 됩니다. 그러나 장치에서 프레임을 캡처하는 다른 방법이 있습니다. 수정 1 – 보조 터치 사용 보조 터치 기능을 사용하여 스크린샷을 찍습니다. 1단계 – 휴대폰 설정으로 이동합니다. 2단계 – 다음으로 탭하여 접근성 설정을 엽니다. 3단계 – 터치 설정을 엽니다. 4단계 – 다음으로 보조 터치 설정을 엽니다. 5단계 – 휴대폰에서 Assistive Touch를 켜세요. 6단계 – “상위 메뉴 사용자화”를 열어서 접근하세요. 7단계 – 이제 이러한 기능 중 하나를 화면 캡처에 연결하기만 하면 됩니다. 그러니 첫 번째를 클릭하세요.

iPhone에 시계 앱이 없습니다. 해결 방법 iPhone에 시계 앱이 없습니다. 해결 방법 May 03, 2024 pm 09:19 PM

휴대폰에 시계 앱이 없나요? 날짜와 시간은 iPhone의 상태 표시줄에 계속 표시됩니다. 그러나 시계 앱이 없으면 세계 시계, 스톱워치, 알람 시계 및 기타 여러 기능을 사용할 수 없습니다. 따라서 누락된 시계 앱을 수정하는 것이 해야 할 일 목록의 맨 위에 있어야 합니다. 이러한 솔루션은 이 문제를 해결하는 데 도움이 될 수 있습니다. 수정 1 - 시계 앱 배치 실수로 홈 화면에서 시계 앱을 제거한 경우 시계 앱을 다시 제자리에 배치할 수 있습니다. 1단계 – iPhone을 잠금 해제하고 앱 라이브러리 페이지에 도달할 때까지 왼쪽으로 스와이프합니다. 2단계 – 다음으로 검색창에 “시계”를 검색하세요. 3단계 – 검색 결과 아래에 “시계”가 표시되면 길게 누르고

iPhone에서 WiFi 통화가 작동하지 않음: 수정 iPhone에서 WiFi 통화가 작동하지 않음: 수정 Jun 03, 2024 am 11:16 AM

iPhone에서 Wi-Fi 통화를 활성화할 수 없나요? 통화 품질이 향상되었으며 셀룰러 네트워크가 약한 원격 위치에서도 통신할 수 있습니다. Wi-Fi 통화는 일반 통화 및 영상 통화 품질도 향상시킵니다. 따라서 휴대폰에서 Wi-Fi 통화를 사용할 수 없는 경우 이러한 해결 방법이 문제를 해결하는 데 도움이 될 수 있습니다. 수정 1 – 수동으로 Wi-Fi 통화 활성화 iPhone 설정에서 Wi-Fi 통화 기능을 활성화해야 합니다. 1단계 – 이를 위해서는 설정을 열어야 합니다. 2단계 – 다음으로 아래로 스크롤하여 “전화” 설정을 찾아서 엽니다. 3단계 – 전화 설정에서 아래로 스크롤하여 “Wi-Fi 통화” 설정을 엽니다. 4단계 - Wi-Fi 통화 페이지에서 '이 iPhone'으로 변경하세요.

화면 녹화가 검게 변합니다. 해결 방법은 다음과 같습니다. 화면 녹화가 검게 변합니다. 해결 방법은 다음과 같습니다. May 03, 2024 pm 09:13 PM

휴대폰 화면에 무언가를 녹음하려고 하는데 화면이 검게 변합니까? 일반적으로 제어 센터에서 화면 녹화를 시작할 수 있습니다. 어떤 경우에는 화면의 항목을 녹화할 수 없습니다. 우리는 화면을 올바르게 녹화하는 데 도움이 될 수 있는 가능한 솔루션 목록과 함께 모든 시나리오를 언급했습니다. 화면 녹화가 검은색으로 나타나는 이유 – iPhone 화면에서 재생되는 동안 DRM(Digital Rights Management)으로 보호된 콘텐츠를 녹화하려고 하면 아무 것도 얻을 수 없습니다. 출력은 새까만 화면이 됩니다. Netflix, Disney+, Hulu 및 Peacock과 같은 모든 주요 OTT 플랫폼에는 모든 화면 녹화 기능을 차단하는 이 DRM이 있습니다. 2. 몇몇 웹사이트에서는 화면 캡처 사용을 금지하고 있습니다.

iPhone이 비행기 모드에서 멈춤: 해결 방법 iPhone이 비행기 모드에서 멈춤: 해결 방법 Jun 15, 2024 pm 02:16 PM

비행기 모드는 어떤 상황에서는 매우 편리합니다. 그러나 동일한 비행기 모드로 인해 iPhone이 갑자기 멈추면 두통이 생길 수 있습니다. 이 기사에서는 iPhone을 비행기 모드에서 해제하는 솔루션 세트를 설계했습니다. 빠른 수정 - 1. 제어 센터에서 직접 비행기 모드를 비활성화해 보세요. 2. 제어 센터에서 비행기 모드를 비활성화할 수 없는 경우 설정 탭에서 직접 비행기 모드를 비활성화할 수 있습니다. 이러한 팁이 작동하지 않으면 아래 수정 사항에 따라 문제를 해결하십시오. 수정 1 – 장치를 강제로 다시 시작 장치를 강제로 다시 시작하는 과정은 매우 간단합니다. 당신이 해야 할 일은 다음의 단계별 지침을 따르는 것 뿐입니다. 1단계 – 볼륨 크게 버튼을 눌렀다 놓아 프로세스를 시작할 수 있습니다. 단계

See all articles