inno 22
Sparta coding
Innovation Camp
w4 day22
memo에서 TIL을 따로 뽑아서 쓸 것
- 한줄 / 한줄
- 매일 자기 직전
학습자료 router 부분?
import work / param id consoel찍기오류
에로우 함수를 넣어서
- 작동이 끝난다음에 실행해라
LifeCoding 9 Update -2
update 버튼은 상세page에서만보이고
welcome page에서는 안보이는게 세련됨 how?
-
새로운 변수에 넣고 초기값을 null;
let contextControl = null;
-
update부분을 잘라놓고
<li> <a href="/update">Update</a> </li>
-
mode가 “READ” 일때 표시되는 부분 아래에 추가
if (mode === "WELCOME") { content = <Article title="Welcome" body="Hello, React"></Article>; } else if (mode === "READ") { let title, body = null; for (let i = 0; i < topics.length; i++) { console.log(topics[i].id, id); if (topics[i].id === id) { title = topics[i].title; body = topics[i].body; } } content = <Article title={title} body={body}></Article>; contextControl = ( <li><a href="/update">Update</a></li> //이부분 ); 마지막으로 "/update" 부분에 page id값을추가 {'/update/'+id}
- Update는 Create와 같은 형식을 써도됨
- form을그대로 복사해서 쓰고
- 기존에 쓴내용을 textarea에 표시하기위해
-
props로 정보를 받아와서 내부에 표시
<p><input type="text" name="title" placeholder="title" value={props.title}/></p> <p><textarea name="body" placeholder="body" value={props.body}></textarea></p>
-
but, props는 내려준 정보를 읽기만 할 수 있는 상태 (수정 불가)
그렇다면.. 이 prop을 state로 승격시켜라…const [title, setTitle] = useState(props.title); const [body, setBody] = useState(props.body); value값의 title,body에 props삭제 <p><input type="text" name="title" placeholder="title" value={title}/></p> <p><textarea name="body" placeholder="body" value={body}></textarea></p>
- state로 승격시키긴했지만 textarea에서는
아직 수정권한이없다? - user의 입력값이 뭔지추적
console.log(event로 받고 이event가있는
tartget 의 value) - console.log(event.target.value);로 확인가능
- setTitle(event.target.value); 로 확인한내용 수정권한 부여
자 이제 user가 입력하는 내용을 전달하고
표시하는건 되는데
- update를 submit하면 어디로? > onUpdate로 간다
- 가서 console.log(title, body)확인해보면 > 잘들어옴
수정한 내용을 넣으려면
- const updatedTopic = { id: id, title: title, body: body };
topics는 배열이니까
- const newTopics = […topics]; 복제
근데 기존의 topics에서 id가 읽치하는 것을 찾아야 함 - for문 을 돌려서 index별로 확인하고
if 일치할 경우 updatedTopic으로 교체해버려
더이상 실행할 게 없으니 break로 종료시키고 - setTopics에 updatedTopic을 담은 newTopics를 넣고
-
바뀐 페이지를 보여주기위해
setMode(‘READ’) read모드로 바꿔줌<Update title={title} body={body} onUpdate={function (title, body) { console.log(title, body); const newTopics = [...topics]; const updatedTopic = { id: id, title: title, body: body }; for (let i = 0; i < newTopics.length; i++) { if (newTopics[i].id === id) { newTopics[i] = updatedTopic; break; } } setTopics(newTopics); setMode("READ"); }} ></Update>
지금 구현한 내용은 Update를 통해서