모델 생성기 구축을 통해 반응 학습

39815 단어 reacttutorial
모인은 훌륭하다. 그것은 생각과 관점을 묘사하는 재미있는 방식이다.그래서 저는 Scrimbafree React course에서 memegenerator 응용 프로그램을 선택하여 바위 프로젝트로 삼은 것은 결코 우연한 일이 아닙니다.이 응용 프로그램의 작업 원리는 API에서 무작위로 모드 이미지를 추출하고 텍스트를 위에 올려 자신만의 개성화된 모드를 만드는 것입니다.
따라서, 본고에서, 나는 당신에게 응용 프로그램을 만드는 단계별 안내서를 제공할 것입니다.만약 당신이 곤혹스럽다면, 당신도 this lecture.부터 Scrimba 수업에서 이러한 절차를 따를 수 있습니다
만약 당신이 나의 교학 스타일을 좋아하고 본 강좌를 완성한 후에 더욱 어려운 도전을 받아들일 기분이 있다면 Scrimbamy upcoming advanced course를 보십시오.

Note: You should already be fairly familiar with some of the fundamental concepts of React, like components, state, props, and lifecycle methods. Also, this tutorial doesn't use Hooks, but in my upcoming course we'll cover Hooks in depth and get tons of practice using them.


1. 템플릿을 작성하고 응용 프로그램 구성 요소를 표시합니다.



우리가 해야 할 첫 번째 일은 응용 프로그램을 위한 템플릿 코드를 만드는 것이다.이를 위해 ReactReactDOM 를 가져오고 ReactDOM 라는 구성 요소를 렌더링하여 나중에 생성합니다.그런 다음 App 어셈블리를 루트에 배치합니다.또한 파일 App 에서 App 을 가져오면 곧 파일을 만들 것입니다.
// index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(<App />, document.getElementById('root'));
그리고 "./App" 파일을 만듭니다.그 중에서 우리는 App.js 라는 기능 구성 요소를 만들었고, 현재는 간단한 App 을 되돌려줍니다.그리고 우리는 그것을 내보낸다.<h1> 애플리케이션이 화면에 제대로 표시되는지 확인할 수 있습니다.
import React from 'react';
function App() {
  return <h1>Hello world!</h1>;
}
export default App;
결과:

2. 헤더 및 MemeGenerator 구성 요소 만들기



다음은 헤더와 MemeGenerator 구성 요소를 만듭니다.헤더는 요소만 표시하고 MemeGenerator는 API를 호출하여 데이터를 그대로 유지합니다.<h1> 파일을 만드는 것부터 시작합시다.제목은 표시에만 사용되는 구성 요소이기 때문에 기능 구성 요소여야 합니다.이제 구성 요소는 간단한 Header.js 으로 돌아가야 합니다.만든 후에 제목을 내보냅니다.
import React from 'react';
function Header() {
  return <h1>HEADER</h1>;
}
export default Header;
다음은 <h1> 파일을 만듭니다.MemeGenerator.js 구성 요소는 데이터를 저장하고 API를 호출하기 때문에 클래스 구성 요소가 필요합니다.클래스 구성 요소가 될 것이기 때문에 React를 가져와야 합니다 MemeGenerator. 즉 named import.
MemeGenerator는 상태 유지를 위해 호출 Componentconstructor() 이 필요합니다. 현재 빈 상태를 추가합니다.제목 구성 요소에서처럼 우리는 먼저 간단한 super()을 보여 준다.그리고 우리는 MemeGenerator를 수출한다.
import React, { Component } from 'react';
class MemeGenerator extends Component {
  constructor() {
    super();
    this.state = {}; //empty state
  }
  render() {
    return <h1>MEME GENERATOR SECTION</h1>;
  }
}
export default MemeGenerator;
이제 Header와 MemeGenerator <h1> 를 가져오고 응용 프로그램 구성 요소에 각각의 실례를 만듭니다.구성 요소를 정확하게 표시하기 위해 App.js 에 포장합니다.
import React from 'react';
import Header from './Header';
import MemeGenerator from './MemeGenerator';
function App() {
  return (
    <div>
      <Header />
      <MemeGenerator />
    </div>
  );
}
export default App;

3. 제목 구성 요소를 완성합니다.

<div> 구성 요소를 완성하기 위해서, 우리는 <Header> 표시를 삽입하고 src를 이미지의 URL로 설정하여trollface 이미지를 추가합니다.그리고 응용 프로그램의 이름을 포함하는 <img> 태그를 추가하고 의미 HTML5<p> 태그에 포장합니다.
function Header() {
  return (
    <header>
      <img
        src='http://www.pngall.com/wp-content/uploads/2016/05/Trollface.png'
        alt='Problem?'
      />
      <p>Meme Generator</p>
    </header>
  );
}
CSS 스타일은 이 강좌에 포함되지 않으므로 <header> 태그에 작성되고 적용됩니다.결과:

학습자는 항상 스스로 스타일을 설계하고 그들의 CSS 기술을 연마할 수 있다는 것이다.<header> 현재 완료, 나머지 도전은 <Header/> 중 진행

4. 초기화 상태



위쪽 텍스트, 아래쪽 텍스트, 제공된 무작위 이미지를 저장하기 위해 상태를 초기화해야 합니다.
이를 위해 최초 구축 시 <MemeGenerator/> 에 배치된 빈 대상을 구축했습니다.우리는 <MemeGenerator/>topText 를 빈 문자열로 초기화하고 bottomText 를 제공된 URL로 초기화합니다.
class MemeGenerator extends Component {
  constructor() {
    super();
    this.state = {
      topText: '',
      bottomText: '',
      randomImg: 'http://i.imgflip.com/1bij.jpg'
    };
  }
}

5. API 호출



다음은 제공된 URL을 API 호출하여 반환된 데이터 randomImgresponse.data.memes 라는 새 상태 속성에 저장합니다.
구성 요소에서 사용하기 위해 단점에서 데이터를 불러와야 할 때 요청할 수 있는 좋은 점은 allMemeImgs 생명주기 방법이다.구성 요소가 설치되면 본 컴퓨터componentDidMount() 함수를 사용하여 제공된 URL을 호출합니다.
componentDidMount() {
  fetch("https://api.imgflip.com/get_memes")
}
이것은 promise를 되돌려줍니다. 우리는 fetch() 방법을 사용하여 자바스크립트 대상으로 변환합니다.
componentDidMount() {
  fetch("https://api.imgflip.com/get_memes")
    .then(response => response.json())
}
그리고 우리는 .json()에서 모델 그룹을 추출하여 우리에게 유용한 호응을 얻었다.
componentDidMount() {
fetch("https://api.imgflip.com/get_memes")
  .then(response => response.json())
  .then(response => {
  const { memes } = response.data
  })
}
현재, 우리는 결과를 response.data 라는 새로운 상태 속성에 저장합니다.이를 위해, 우리는 allMemeImgs 공수조로 초기화할 것이다.
this.state = {
  topText: '',
  bottomText: '',
  randomImg: 'http://i.imgflip.com/1bij.jpg',
  allMemeImgs: []
};
이제 allMemeImgs로 돌아가서 상태를 설정합니다.우리는 이전의 상태에 흥미가 없기 때문에, componentDidMount() 을 모델로 설정할 것이다.
componentDidMount() {
  fetch("https://api.imgflip.com/get_memes")
    .then(response => response.json())
    .then(response => {
  const { memes } = response.data
  this.setState({ allMemeImgs: memes })
  })
}
유효성을 확보하기 위해 저희allMemeImgs의 첫 번째 프로젝트는 다음과 같이 보입니다.

다음은 전체 console.log 함수의 개술이다.
componentDidMount() { //ensure that data is fetched at the beginning
  fetch("https://api.imgflip.com/get_memes") //call to URL
    .then(response => response.json()) //turn promise into JS object
    .then(response => {
  const { memes } = response.data //pull memes array from response.data
  console.log(memes[0]) // check data is present
  this.setState({ allMemeImgs: memes }) // set allMemeImgs state
})
}

6. 입력 양식 만들기


우리는 사용자가 맨 위와 밑에 있는 텍스트를 입력할 수 있도록 폼을 만들고 싶습니다.HTML componentDidMount() 태그와 간단한 <form> 태그를 사용하여 "Gen"을 나타냅니다.우리는 사전에 제공된 CSS를 사용하여 스타일 디자인을 한다.
render() {
  return (
    <div>
      <form className="meme-form">
        <button>Gen</button>
      </form>
    </div>
  )
}

7. 양식에 입력 필드 추가



다음으로, 우리는 두 개의 입력 필드를 추가해야 한다. 하나는 위쪽 텍스트에 사용되고, 다른 하나는 아래쪽 텍스트에 사용된다.폼은 제어된 폼이어야 하기 때문에 우리는 모든 필요한 속성을 추가해야만 그것을 작업할 수 있다.잠시 후에 우리는 <button> 프로세서를 만들 것이다.
우리는 두 개의 입력 필드를 만들었는데, 모두 유형 onChange 과 적당한 명칭 속성 texttopText 을 가지고 있다.우리는 레이블을 사용하지 않고 자리 표시자: "맨 위 텍스트"와 "맨 아래 텍스트"를 사용합니다.
마지막으로 이 값을 controlled form 의 현재 값과 bottomTextstate 로 설정합니다.
render() {
  return (
    <div>
      <form className="meme-form">
        <input
          type="text"
          name="topText"
          placeholder="Top Text"
          value={this.state.topText}
        />
        <input
          type="text"
          name="bottomText"
          placeholder="Bottom Text"
          value={this.state.bottomText}
        />
        <button>Gen</button>
      </form>
    </div>
  )
}

8. onChange 프로세서를 만듭니다.



입력 필드를 변경할 때마다 상태를 업데이트하는 onChange 프로세서를 만듭니다.
우선, 우리는 사건을 수신하는 {this.state.topText} 함수를 만듭니다.
handleChange(event) {

}
이제 두 입력 필드 {this.state.bottomText} 를 동일 handleChange() 으로 설정합니다.
<form className='meme-form'>
  <input
    type='text'
    name='topText'
    placeholder='Top Text'
    value={this.state.topText}
    onChange={this.handleChange}
  />
  <input
    type='text'
    name='bottomText'
    placeholder='Bottom Text'
    value={this.state.bottomText}
    onChange={this.handleChange}
  />
  <button>Gen</button>
</form>
구조 함수에 귀속 방법을 기억해야 합니다. - 이것은 React 개발자의 흔한 문제입니다.
constructor() {
  super()
  this.state = {
    topText: "",
    bottomText: "",
    randomImg: "http://i.imgflip.com/1bij.jpg",
    allMemeImgs: []
  }
  this.handleChange = this.handleChange.bind(this)
}
새로운 onChange 함수를 테스트하기 위해 간단한 handleChange 함수를 추가했습니다.
handleChange(event) {
  console.log("Working!")
}
제대로 발사되면 다음 내용이 표시됩니다.

현재 handleChange() 함수를 기입합니다.이를 위해, 우리는 사건에서 이름과 값 속성을 추출하기를 희망합니다.이렇게 하면 우리가 업데이트해야 할 상태의 이름 console.log 또는 handleChange() 과 입력 상자의 값을 얻을 수 있습니다.
handleChange(event) {
  const { name, value } = event.target
}
우리는 현재 이러한 업데이트 상태를 사용할 것이다.이전 상태에 관심이 없기 때문에, 입력 필드에 입력한 값으로 설정할 수 있는 대상을 제공할 수 있습니다.
handleChange(event) {
const {name, value} = event.target
this.setState({ [name]: value })
}

9. 위쪽 및 아래쪽 텍스트 옆에 패턴 이미지 표시


이제 응용 프로그램이 위쪽과 아래쪽 텍스트 옆에 모드 이미지를 표시하기를 원합니다.우리는 topText 아래에 bottomText 표시를 삽입하고 [name] 를 사용하여 초기화된 <img> 을 원본으로 설정합니다.그리고 나서 우리는 두 개의 <form> 태그를 추가합니다. 이 태그는 상응하는 텍스트를 표시하고 이 텍스트도 상태에 저장됩니다.이 모든 것은 하나randomImg에 봉인되어 있으며, 사전에 제공된 src={this.state.randomImg} 클래스를 사용하여 설계된다.
<div className='meme'>
  <img src={this.state.randomImg} alt='' />
  <h2 className='top'>{this.state.topText}</h2>
  <h2 className='bottom'>{this.state.bottomText}</h2>
</div>
우리는 현재 텍스트 상자에 입력해서 응용 프로그램을 테스트할 수 있다.키를 누를 때마다 상태를 올바르게 설정하므로 입력할 때마다 이미지에 표시되는 텍스트가 변경됩니다.

10. 위쪽 및 아래쪽 텍스트 옆에 무작위 패턴 이미지 표시



현재, <h2> 단추를 눌렀을 때, 이 방법은meme 이미지를 표시합니다. 이 이미지는 div 그룹에서 무작위로 선택된 것입니다.패턴에서 선택한 이미지의 속성은 meme 입니다.
우리는 이 임무를 더욱 작은 부분으로 분해할 수 있다.
우선, 우리는 표의 allMemeImgs 를 새로운 방법과 같은 이름으로 설정하고, 우리는 Gen 를 호출할 것이다..url우리는 현재 onSubmit 함수 위에 handleSubmit() 함수를 만들고 있다.이벤트의 기본값을 방지해야 합니다. 그렇지 않으면 페이지를 새로 고치려고 시도할 것입니다.
handleSubmit(event) {
  event.preventDefault()
}
우리는 <form className="meme-form" onSubmit={this.handleSubmit}>에 귀속해야 한다handleSubmit().
constructor() {
  super()
  this.state = {
    topText: "",
    bottomText: "",
    randomImg: "http://i.imgflip.com/1bij.jpg",
    allMemeImgs: []
  }
  this.handleChange = this.handleChange.bind(this)
  this.handleSubmit = this.handleSubmit.bind(this)
}
현재, 우리는 색인에서 모형을 얻고 render() 을 무작위 항목으로 설정해야 한다.
handleSubmit(event) {
  event.preventDefault()
  // get a random int (index in the array)
  // get the meme from that index
  // set `randomImg` to the `.url` of the random item I grabbed
}
무작위 수를 얻기 위해 우리는 사용한다handleSubmit().그것이 constructor() 그룹의 색인 중 하나인지 확인하기 위해서, 우리는 그것을 그룹의 길이에 곱합니다.
const randNum = Math.floor(Math.random() * this.state.allMemeImgs.length);
우리는 현재 randomImg.url 로 설정하고, 인덱스 Math.floor(Math.random) 는 방금 얻은 allMemeImgs 로 설정합니다.그리고 우리는 그것의 끝에 randMemeImg를 더했다.
const randMemeImg = this.state.allMemeImgs[randNum].url;
현재 우리가 해야 할 일은 allMemeImgs 업데이트 랜덤 속성을 사용하여 상태를 업데이트하는 것이다.
this.setState({ randomImg: randMemeImg });
우리가 완성한 allMemeImgs 함수는 다음과 같다.
handleSubmit(event) {
  event.preventDefault()
  const randNum = Math.floor(Math.random() * this.state.allMemeImgs.length)
  const randMemeImg = this.state.allMemeImgs[randNum].url
  this.setState({ randomImg: randMemeImg })
}

완전한 모듈 생성기



우리는 현재 memegenerator 프로그램을 완성했습니다. randNum 단추를 눌렀을 때마다 다른 그림을 얻고 입력한 텍스트에 덮어씁니다.
더 많은 학습을 위해 우리는 코드를 사용해서 그것을 개선할 수 있는지, 아니면 다른 API에서 이미지를 얻으려고 시도할 수 있는지를 볼 수 있다.매우 복잡한 실천에 대해 우리는 심지어 모든 코드를 삭제하고 다시 구축할 수 있다.
이 강좌를 완성하고 이 프로젝트에 사용되는 모든 기술을 배우신 것을 축하합니다.
만약 당신이 준비가 다 되었다면, 반드시 내가 곧 출시할 advanced course을 보십시오. 왜냐하면 그것은 당신을 React에서 전문적인 수준에 이르게 하기 때문입니다!

좋은 웹페이지 즐겨찾기