npm i @fortawesome/fontawesome-free
(https://www.npmjs.com/package/@fortawesome/fontawesome-free?activeTab=readme)
1.구글폰트 검색 - link 복사
2.리액트 src/assets/font 폴더 아래에 폰트별 Jsx 생성(<>링크넣기</>)
3.css파일에 해당 폰트 - CSS rules to specify families 넣기
주의 :
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin = "true" />
이렇게 넣어야 에러메시지가 뜨지 않음.
![[Pasted image 20240201113540.png]]
<Navbar totalCount={items.filter(item=>item.count>0).length} />
얕은복사 vs 깊은복사??
얕은복사 참조값(주소) 복사 -> 같은 주소지를 쓰니까 원본이나 복사본을 변경하면, 다른 객체 또한 변경
깊은복사 원본 -> 새롭게 하나 복사해서 생성
import React from 'react'
const AddForm = (props) => {
const formRef = React.createRef();
const inputRef = React.createRef();
const onSubmit = (e)=>{
e.preventDefault(); //브라우저 기본기본 막아주기(새로고침 방지)
const name = inputRef.current.value;
name && props.handleAdd(name); // 추가
formRef.current.reset(); // 폼 태그 정보 청소 시 사용!!
}
return (
<>
<form ref={formRef} className='add-for' onSubmit={onSubmit}>
<input ref={inputRef} type="text" className='add-input' />
<button className='add-button'>Add</button>
</form>
</>
)
}
export default AddForm
최상위에서부터 props로 변수, 함수, 핸들함수 등을 보낼 수 있지만 깊이가 깊어지면 이동하는 것이 많아진다.
그러니 오늘 추가적으로 리덕스를 학습해보기로 하였다.
![[Pasted image 20240201204951.png]]
initialState:{
value :0,
number:0,
list:[],
역할: 액션 타입은 액션을 식별하는 문자열 상수입니다. 액션에 대한 유일한 식별자로 사용됩니다.
왜 사용하는가?: 리덕스에서는 액션의 타입을 통해 어떤 종류의 액션이 발생했는지를 판단하고, 리듀서에서 해당 액션에 대한 상태 변경을 수행합니다.
역할: 스토어는 애플리케이션의 상태를 담고 있는 객체입니다. 스토어에는 액션에 의해 변경된 상태가 저장되어 있습니다.
왜 사용하는가?: 애플리케이션의 상태를 중앙에서 효율적으로 관리하고, 상태 변경에 대한 알림을 받아 컴포넌트들이 업데이트될 수 있도록 합니다.
역할: 리듀서는 현재 상태와 액션을 받아서 새로운 상태를 반환하는 함수입니다. 리듀서는 순수 함수로 작성되어야 합니다.
왜 사용하는가?: 리듀서는 액션에 따라 상태를 어떻게 변경할지 정의하고, 불변성을 유지하면서 새로운 상태를 생성합니다.
한 마디로 액션 타입은 액션의 종류를 식별하는 열쇠 🔑,
스토어는 애플리케이션의 상태 저장소 💾,
리듀서는 상태를 업데이트하는 작업장 🛠️