ํฐ์คํ ๋ฆฌ ๋ทฐ
Today I Learned
๐ ๊ฐ์ธ ๊ณผ์ ๋! ๐
๐ ๋จ์ด ์นด๋ ์ฒดํฌ ์์ด์ฝ ํด๋ฆญ ์ ์ ๋ณ๊ฒฝ ๊ธฐ๋ฅ ์ค๋ฅ ํด๊ฒฐ
์ด์ ๋ง๋ค์๋ checked ๊ธฐ๋ฅ์ด ์๊ณ ๋ณด๋ ์ ๋๋ก ๋์ํ์ง ์๊ณ ์์๋ค.
์๋๋ ํด๋ฆญํ๋ฉด Firestore์ ์๋ checked ์ ๊ฐ์ด ๋ณ๊ฒฝ์ด ๋๊ณ ,
๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ก ๋ค์ State๋ฅผ ๊ต์ฒดํด์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ ํ๋ ์ปดํฌ๋ํธ์๋ ์ฐ๋์ด ๋์ด์ผ ํ๋๋ฐ
์๊ณ ๋ณด๋ ๋ฏธ๋ค์จ์ด ์ฝ๋๋ฅผ ์๋ชป ์์ฑํด์ ํด๋ฆญํ์ ๋ Firestore์ checked ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์๊ณ ์์๋ค.
๊ทธ๋์ ์ฒดํฌ ์์ด์ฝ์ ํด๋ฆญํด์ ์์ ๋ณํ๊ฒ ํ ํ ์๋ก๊ณ ์นจํ๊ฑฐ๋ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ณ ๋ค์ ๋์์ค๋ฉด
๋ค์ checked์ ๊ฐ์ด false๋ก ๋ฐ๋๊ณ , ์์ด์ฝ๋ ๋ค์ ํฐ ์์ผ๋ก ๋์ด ์์๋ค.
์๊ณ ๋ณด๋ ๋ฏธ๋ค์จ์ด ํจ์์์ checked ํค์ ๊ฒฝ๋ก๋ฅผ ์๋ชป ์ ์์๋ค.
์๋์ ์ด์ checked์ ๊ฐ์ด false ๋๋ true ์ธ์ง์ ๋ฐ๋ผ ๋ค์ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ์ผํญ์ฐ์ฐ์์์
์กฐ๊ฑด๋ฌธ์ ์๋ ์ฒ๋ผ ์์ฑํ์ง ์๊ณ ๋ฐ๋ก docRef.checked == false? ๋ก ์์ฑํ์๊ธฐ ๋๋ฌธ์
ํญ์ ๊ฐ์ undefined ์ฌ์ Firestore์ ๋ฐ์ดํฐ ์ฐ๋์ด ์ ๋๊ณ ์์๋ ๊ฒ์ด์๋ค.
๊ทธ๋์ ์๋์ ๊ฐ์ด ๋ค์ ์ด์ ์ checked ๊ฐ์ ํ์ธํ๋ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ์๋๋
Firestore ์๋ ํด๋ฆญ ์ checked์ ๋ณ๊ฒฝ๋ ๊ฐ์ด ์ ์ฐ๋๋๊ณ ํ๋ฉด์์๋ ์์ด์ฝ์ด ์ ์ ์ง๋์๋ค!
export const checkVocaFB = (voca_id) => {
return async function (dispatch, getState) {
const docRef = doc(db, 'voca', voca_id)
const pre_voca_list = getState().voca.list;
const voca_index = pre_voca_list.findIndex((vc) => {
return vc.id === voca_id;
});
const pre_checked = pre_voca_list[voca_index].checked;
pre_checked == false ? await updateDoc(docRef, {checked: true})
: await updateDoc(docRef, {checked: false});
const voca_list = getState().voca.list;
const voca_checked = voca_list[voca_index].checked;
dispatch(checkVoca(voca_index, voca_checked));
}
}
๐ input ์ ํจ์ฑ ๊ฒ์ฌ ์ถ๊ฐ
๊ทธ๋ฆฌ๊ณ input ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ถ๊ฐํ๋ค.
์ด์ฐจํผ ๋ฐ์ดํฐ ํ์ ์ String์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋จํ๊ฒ
1) ์ ๋ ฅ ๊ธ์ ์ ์ ํ
2) ๋ค์ฏ ๊ฐ์ ์ ๋ ฅ๋ ์ค ํ๋๋ผ๋ ๋น์ด ์์ผ๋ฉด ์ถ๊ฐ ๋๋ ์์ ์ด ๋์ง ์๋๋ก ํ์๋ค.
const updateVocaList = () => {
window.alert('๋จ์ด๋ฅผ ์์ ํ์๊ฒ ์ต๋๋ค?');
let wordValue = word.current.value;
let pronunciationValue = pronunciation.current.value;
let meaningValue = meaning.current.value;
let exampleValue = example.current.value;
let translateValue = translate.current.value;
if ((wordValue && pronunciationValue && meaningValue &&
exampleValue && translateValue) !== '') {
dispatch(updateVocaFB({
word: wordValue,
pronunciation: pronunciationValue,
meaning: meaningValue,
example: exampleValue,
translate: translateValue,
checked: current_voca.checked,
}, current_voca.id));
history.push("/");
} else {
window.alert('Please, fill in all blanks.');
return false;
}
};
return (
<Container>
<UpdateBox>
<label>word</label>
<TextArea type="text" ref={word} maxLength='14'
defaultValue={current_voca ? current_voca.word : ""} />
<label>pronunciation</label>
<TextArea type="text" ref={pronunciation} maxLength='20'
defaultValue={current_voca ? current_voca.pronunciation : ""} />
<label>meaning</label>
<TextArea type="text" ref={meaning} maxLength='20'
defaultValue={current_voca ? current_voca.meaning : ""} />
<label>example sentence</label>
<TextArea type="text" ref={example} maxLength='20'
defaultValue={current_voca ? current_voca.example : ""} />
<label>translation</label>
<TextArea type="text" ref={translate} maxLength='20'
defaultValue={current_voca ? current_voca.translate : ""} />
<ChangeVocaButton
onClick={() => {
updateVocaList();
}}
>CHANGE<br />VOCA</ChangeVocaButton>
</UpdateBox>
</Container>
)
}
๐ ํ์ด์ง ๋ก๋ฉ ์ค ๋ณด์ฌ์ง๋ ์คํผ๋ ์ถ๊ฐ
๊ฐ์ ๋ณด๋ฉด์ ์คํผ๋ ํ๋ฉด์ ๋ง๋ค์ด์ ์ถ๊ฐํ๋ค.
๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ์์ด ์ด๋์ด ์์ด๋ผ์ ๋ฌ ์์ด์ฝ์ผ๋ก ๋ง๋ค์๋ค.
์ด๋ฒ ์ฃผ๋ฅผ ์์ํ ๋๋ง ํด๋ '๊ฐ์ธ ๊ณผ์ ๋นจ๋ฆฌ ๋๋ด๊ณ ๋ถ์กฑํ ๊ณต๋ถ ํด์ผ์ง!' ๋ผ๊ณ ๋ง์์ ๋จน์์๋๋ฐ,
์คํ๋ ค ๊ทธ๋ฐ ๋ค์ง์ด ๋๋ฅผ ๋ ์กฐ๊ธํ๊ฒ ๋ง๋๋ ๊ฒ ๊ฐ์๋ค.
๊ทธ๋์ ๋นจ๋ฆฌ ๋๋ด๋ ค๋ ์์ฌ๊ณผ ๋ค๋ฅธ ์ฌ๋๊ณผ ๋๋ฅผ ๋น๊ตํ๋ ค๊ณ ํ๋ ๋ฌด์์์ ์ธ ์ต๊ด๋ค์ ๋ด๋ ค๋์ผ๋ ค๊ณ ๋ง์ธ๋์ ์ ์ด์ฌํ ํ๋ค.
์๊ฐํด ๋ณด๋ ๋๋ ์์ง ๋ง์ ๋ถ๋ถ์์ ๋ถ์กฑํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ ๊ณผ์ ํ๋๋ฅผ ํ๋ฉด์๋
๋ด๊ฐ ๋ฐฐ์ธ ์ ์๋ ๊ฒ๋ค์ด ์์ฃผ ๋ง์๋๋ฐ, ํ๋งํฐ๋ฉด ์ด๋ฌํ ๊นจ๋ฌ์์ ๋์น ๋ป ํ๋ค.
๊ทธ๋์ ์ด๋ฒ ์ฃผ๋ ์ ๋ฒ ์ฃผ๋ณด๋ค๋ ์ฌ์ ๋ก์ด ๋ง์์ ๊ฐ์ง๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ,
ํ์๋ก ์๊ตฌํ๋ ์ฌํญ ์ธ์๋ ๋ ๊ฐ์ ํ ์ ์๋ ๋ถ๋ถ์ ์๋์ง ๊ณ ๋ฏผํ๋ฉด์ ๊ณผ์ ๋ฅผ ์งํํ๋ค.
๊ทธ๋์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ํ์๋ก ์๊ตฌํ๋ ๊ธฐ๋ฅ๋ณด๋ค ์กฐ๊ธ ๋ ๋ง์ ๊ฒ๋ค์ ๊ตฌํํ๋ค!
๊ทธ๋์ ์ด๋ฒ ์ฃผ ๊ฐ์ธ ๊ณผ์ ๊ฒฐ๊ณผ๋ฌผ๋ ์ ์ ์ด ๊ฐ๋ค.
๋ ํ๋์ ์๊ณ ์์คํ ํ์ด์ง๊ฐ ์๊ฒจ๋ฌ๊ธฐ ๋๋ฌด๋ค~
์์ธํ ๋ด์ฉ์ ์์ํ ์นดํ ๊ณ ๋ฆฌ์์ ๋ค๋ฃฐ ์์ ์ด๋ค.
์ค๋์ TIL ๋!
'what i learned > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 2021/11/29 Mon - (0) | 2021.11.29 |
---|---|
[TIL] 2021/11/27 Sat - ์ต์ข _์ง์ง์ต์ข _์ง์ง๋ฆฌ์ผ์ต์ข _์ง์งํ์ด๋์ต์ข .js (0) | 2021.11.27 |
[TIL] 2021/11/25 Thu - ์ ์ ์ฒด๋ฆฌ์ธ์. (2) | 2021.11.25 |
[TIL] 2021/11/24 Wed - (0) | 2021.11.24 |
[TIL] 2021/11/23 Tue - (0) | 2021.11.23 |