코딩/리액트

리액트 / 상태 use state

민여 2022. 3. 25. 14:57

*영어대사를 입력해주세요 생성(submit)을 눌렀을때 콘솔창에 카운터1 카운터2 누를때마다 숫자가 올라감 

const Form = (props) => {
      const counterState = React.useState(1);
      const counter = counterState[0];
      const setCounter = counterState[1];
      console.log("카운터", counter);
      function handleFormSubmit(event) {
        event.preventDefault();
        console.log("폼 전송됨");
        setCounter(counter + 1);
      }
      return (
        <form onSubmit={handleFormSubmit}>
          <input type="text" name="name" placeholder="영어 대사를 입력해주세요" />
          <button type="submit">생성</button>
        </form> ); }

 

-이때 자바스크립트 문법으로 빨간글씨를 단축해서 기입

      const counterState = React.useState(1);
      const counter = counterState[0];
      const setCounter = counterState[1];

                           ↓

     const [counter, setCounter] = React.useState(1); 

 

*lifting state up / 상태 끌어올리기

자식컴포넌트안에서만 쓰이던 상태를 상위컴포넌트에서 같이 쓰고싶을때 

 

상태를 부모컴포넌트에 넣고 자식컴포넌트에 props로 넘겨준다고 생각하면된다

 

부모 컴포넌트

    const App = () => {
      const [counter, setCounter] = React.useState(1);

      console.log("카운터", counter);
      function handleFormSubmit(event) {                         →            자식한테 가져온 상태 
        event.preventDefault();
        console.log("폼 전송됨");
        setCounter(counter + 1);
      }
      return (
        <div>
          <Title>{counter}번째 고양이 가라사대</Title>
          <Form handleFormSubmit={handleFormSubmit} />               →         심어주기 위함 
          <MainCard img="https://cataas.com/cat/60b73094e04e18001194a309/says/react" />
          <Favorites /></div> )}

 

자식 컴포넌트 

const Form = ({ handleFormSubmit }) => {                                   →         props처럼 심은거   
      return (
        <form onSubmit={handleFormSubmit}>
          <input type="text" name="name" placeholder="영어 대사를 입력해주세요" />
          <button type="submit">생성</button>
        </form>
      );
    }

 

*생성을 눌렀을때 고양이 사진 바꾸기 

 

1.APP 안에 

const [mainCat, setMainCat] = React.useState(CAT1); 라고 상태를 추가 

 

2.바뀔 이미지 

const CAT1 = "https://cataas.com/cat/60b73094e04e18001194a309/says/react";
const CAT2 = "https://cataas.com//cat/5e9970351b7a400011744233/says/inflearn";
const CAT3 = "https://cataas.com/cat/595f280b557291a9750ebf65/says/JavaScript;

 

3. function에 setMainCat(CAT2); 추가

4. return에 <MainCard img={mainCat} />변경 

'코딩 > 리액트' 카테고리의 다른 글

리액트 / 강의 선택과 노션사용  (0) 2022.04.14
리액트 / 기초 재정리  (0) 2022.04.07
리액트 / 리스트  (0) 2022.04.07
리액트 / 이벤트 다루기  (0) 2022.03.25
리액트 / 기초, 컴포넌트, 스타일링  (0) 2022.03.25