react create

박진은·2022년 11월 27일
0

react

목록 보기
7/17
function Create(props) {
  return <article>
    <h2>
      Create
    </h2>
    <form onSubmit={event => {
      event.preventDefault();//원래 함수의 실행을 막음 페이지 리로드를 막음
      const title = event.target.title.value;
      const body = event.target.body.value;
      props.onCreate(title, body);
    }}>
      <p><input type="text" name="title" placeholder="title" /></p>
      <p><textarea name="body" placeholder="body"></textarea></p>
      <p><input type="submit" value="Create"></input></p>
    </form>
  </article>
}
function App() {

  // const _mode = useState("WELCOME");
  // const mode = _mode[0];
  // const setMode = _mode[1]

  const [mode, setMode] = useState("WELCOME"); // 위에 3줄을 한번에 줄임
  //useState가 반환하는 객체의 값음 _mode 배열인데 이 배열안의 1원소는 파라미터로 전달한 값이다
  // 그리고 두번째 원소는 이상태를 설정하는 메소드가 전달이 된다.
  //그리고 이름은 변경이 가능함

  const [id, setId] = useState(null);
  const [nextId, setNextId] = useState(4);

  const [topics, setTopics] = useState([
    { id: 1, title: 'new list', body: 'html is ...' },
    { id: 2, title: 'new list2', body: 'css is ...' },
    { id: 3, title: 'new list3', body: 'javascript is ...' },
  ]);


  let content = null;
  if (mode === 'WELCOME') {
    content = <Article title="WELCOME" body="WELCOME all is well"></Article>

  } else if (mode === 'READ') {
    let title, body = null;//자바 스크립트에서 한번에 선언해서 사용함 변수 둘다 null

    for (let i = 0; i < topics.length; i++) {

      if (topics[i].id === id) {
        title = topics[i].title;
        body = topics[i].body;
      }
    }

    content = <Article title={title} body={body}></Article>
  } else if (mode === 'CREATE') {
    content = <Create onCreate={(_title, _body) => {
      const newTopic = { id: nextId, title: _title, body: _body }
      const newTopics = [...topics]//복제본 생성함
      newTopics.push(newTopic);
      setTopics(newTopics);//복제본을 생성해서 다시 넣어 새롭게 넣어주어야 다시 랜더링됨.
    }}></Create>
  }

  return (
    <div className="App">
      <header className="App-header">

        <Header title="all is well" onChangeMode={function () {
          alert('Header hihi');//함수를  태그 내부에 만들어서 전달함
          mode = "WELCOME";
        }}></Header>

        <Header></Header>

        <Fuck topics={topics} onChangeMode={(_id) => {
          setMode("READ");
          alert(_id);
          setId(_id);  //onChangeMode()안에서 setStat가 일어나게 만든다.
        }}></Fuck>

        {content}
        <a href="/create" onClick={event => {
          event.preventDefault();
          setMode('CREATE');
        }
        }>Create</a>
      </header>
    </div>
  );
}

사용자 인터페이스에서 새로운nav를 추가하는 create를 학습함 여기서 포인트는 setState()에서 들어가는게 기본 타입이 아니고 사용자가 정의하거나 obj라면 ... 을 사용해서 복제후에 다시 복제본을 수정해서 다시 상태를 정의 해주어야 새롭게 랜더링 된다.

profile
코딩

0개의 댓글