220418
こうぞうぶんかいわりあて
オブジェクトに構造分解を割り当てる
const child = {
name = "Alex",
age = 13
school = "abc school"
}
const name = child.name
const age = child.age
const school = child.school
// 로 쓰는 대신 아래처럼 구조분해할당을 이용해 한 줄로 정리할 수 있다.
const { name, age, school } = chilid
// child 안에 있는 변수를 빼서 새로운 변수를 만들겠다는 선언
const { data, loading } = useQuert(FETCH_BOARDS)
// 위의 코드 아래처럼 다시 적어줄 수도 있다.
const aaa = useQuery(FETCH_BOARD
aaa.data
aaa.loading
関数の実行後に受信した戻り値はオブジェクトですオブジェクトの構造分解配分では,順序は重要ではなく,キー値は重要である.オブジェクトに宣言をインポートするキーなので、エラーは発生しません.
アレイからの構造分解の割り当て
const classmate = ["Alex", "Peter", "Amy]
const child1 = classmate[0]
const child2 = classmate[1]
const child3 = classmate[2]
const [child1, child2, child3] = classmate
useState実行後の戻り値は配列
comst [state, setState] = useState("")
const bbb = useState
bbb[0] = state
bbb[1] = setState
// bbb[1](20) 을 넣으면 setState(20)이 된다.
const [ , child2, child3 ] = classmates
// 쓰지 않는 변수가 있다면 , 로 자리를 남겨줘야 한다.
並び順が重要です.未使用の変数では、次の変数に挿入して渡すことを忘れないでください.なぜ書き込み構造分解割当てですか?
// 1. 구조분해 할당으로 함수 파라미터 받기
function onClickAAA({ name, age, school }){ // 2. 구조분해 할당해서 변수로 받는다
console.log(name) // "철수"
}
const child = {
name: "철수",
age: 13,
school: "다람쥐초등학교"
}
onClickAAA(child) // 1. 객체 child 를 인자로 넘기면
// 같은 이름을 가진 데이터를 뽑아오기 때문에 순서가 다르거나 인자로 넘어온 데이터 개수가 달라도 옛날 방식과 같은 오류가 나지 않는다.
// 2. 안좋은 옛날 방식
function onClickAAA(name, age, school){ // 2. age에 다람쥐초등학교가 들어가게 된다
console.log(name)
}
const name: "철수"
const age: 13
const school: "다람쥐초등학교"
onClickAAA(name, school) // 1. 인자로 name과 school을 넘겨주면
Rest parameter
const child = {
name: "철수",
age: 8,
school: "다람쥐 초등학교",
money: 2000,
hobby: "수영"
}
moneyと嗜好を削除したい場合は、delete child.money delete child.アマチュア趣味で消すことができます.しかし、他の場所で使用される可能性があるため、jsで原本に触れる行為はよくない.この場合、構造分解割当てとrestパラメータを使用して値をクリアできます.const { money, hobby, ...rest } = child
restは{ name: "철수", age: 8, school: "다람쥐 초등학교" }
を含む.上記のようにrestパラメータを使用すると、ソースを破損することなくデータを削除できます...restはあなたが望む名前に変えることができます.
学校は書き間違えました.
Custom Hooks
useState,useEffect,useQuery,useRouter,useMutationなどのuse付き関数をreact hookと呼ぶ.hookを使用する関数がある場合は、通常の関数とは少し異なるネーミング方法を使用します.
関数名の前に
use
を付けて生成した関数をcustom hooks
と呼ぶ.useを追加しなくても実行できますが、これはDocsが推奨する事項なので、useを追加してください!
export function useAuth() {
const router = useRouter();
useEffect(() => {
if (!localStorage.getItem("accessToken")) {
alert("로그인 후 이용 가능합니다");
router.push("/login");
}
}, []);
}
function CustomHooksUseAuthPage() {
// useAuth 를 import 해와서 사용
useAuth();
return <div>철수의 프로필 페이지 입니다!!</div>;
}
export default CustomHooksUseAuthPage;
権限分岐論理の使用は、HOCを使用する場合よりも簡単です.多くの場所でよく使われる関数がある場合は、hooksフォルダを作成し、削除して管理します.コンポーネントが簡潔になります.
Cache Modify
コンポーネントからuseQueryを介して入力された{data}は、
apollo-cache-state
と呼ばれるglobal stateに格納される.cache.modify
とは、global stateに格納されているデータを直接変更することを意味する.global stateは、fetchBoard:{}のような
객체 형태로 데이터가 저장
を含み、各オブジェクトをフィールドと呼ぶ.const onClickDelete = (boardId: string) => async () => {
await deleteBoard({
variables: { boardId },
// variables 요청 후 cache 를 업데이트
// cache, useQuery의 결과
update(cache, { data }) {
// data 안에 deleteBoard
const deletedId = data.deleteBoard; // deleteBoard 를 실행하고 남은 return 값
cache.modify({
fields: {
// 현재 페치보드 상태(prev)에서 삭제된 보드 지우기
fetchBoards: (prev, {readField}) => {
// _id가 배열로 저장된 prev에서 deletedId 와 같은 _id 제거
// filter로 삭제된 _id와 다른 데이터만 남겨서 return 해주기
// el._id 를 사용할 수 없기 때문에 readField로 el 에서 _id를 꺼내온다.
const filteredPrev = prev.filter((el) => readField("_id", el) !== deletedId);
return filteredPrev;
},
}, // global state 를 수정했기 때문에 사용하는 모든 컴포넌트에서 업데이트 된다
});
},
});
};
cache.modifyを使用した削除は、主に無限スクロールページに使用されます.Reference
この問題について(220418), 我々は、より多くの情報をここで見つけました https://velog.io/@imnamesol/220418テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol