📝MineSerch.jsx
export const TabelContext = createContext({
tableData: [],
dispatch: () => {},
}); //기본값을 넣을 수 있음.
<TabelContext.Provider value={{tableDate: state.tableDate, dispatch }}>
<Form/>
<div>{state.timer}</div>
<Table />
<div>{state.result}</div>
</TabelContext.Provider>
context API가 prrvider를 제공함.
데이터는 value에다 넣음 << 자식 컴포넌트에 제공할 데이터
📝Form.jsx 에 dispatch를 불러올 수 있음.
const {dispatch} = useContext(TabelContext);
근데 value값을
value={{tableDate: state.tableDate, dispatch }}
이렇게 불러오면 성능에 문제 (새로운 객체가 생기면 매번 새롭게 리렌더링) 발생.
👉캐싱해주면됨!
const value = useMemo(()=> ({tableData: state.tableDate, dispatch}), [state.tableData]);// 캐싱해줘야함
테이블 값이 바뀔 때 갱신해주면 됨.
dispatch는 항상 같게 유지가 됨.
칸 클릭하면 OPEN_CELL되어서 몇번째 칸 몇번째 줄인지 체크되어서 칸이 변화하게 만듬
오른쪽 클릭했을때 메뉴가 안뜨게 e.preventDefault()
해주기
칸 클릭 -> 주변 칸에 배열생성 -> 지뢰 있는 칸 개수세기
checkAround
내 기준으로 검산을 하는 함수checked
배열만들기if (checked.includes(row + '/' + cell)){
return;
} else {
checked.push(row + '/' + cell);
}// 한 번 연칸은 무시하기