React
![[Kossie Coder] 영화 삭제하기 - filter를 이용해서 삭제한 id 가 아닌 영화들 return하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2F3js0k%2FbtrqIsDnRDG%2FAAAAAAAAAAAAAAAAAAAAAICR2WFVMPLUQaQ975PLDE6TgtmFODOQMf0g0IUp1v3Q%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dyc6%252FMWkZKy80lYfWQIH0f9y9Ofc%253D)
[Kossie Coder] 영화 삭제하기 - filter를 이용해서 삭제한 id 가 아닌 영화들 return하기
// App.js import React, 🌟{ useState }🌟 from 'react'; import './index.css'; import Movie from './components/Movie'; import MovieForm from './components/MovieForm'; function App() { 🌟const [movies, setMovies] = useState([]);🌟 🌟const removeMovie = (id) => { // 삭제한 영화의 id가 아닌 영화들만 보여주기 setMovies( movies.filter((movie) => { return movie.id !== id; }) ); };🌟 const renderMovies = movies.length ? movies..
![[Kossie Coder] 영화 삭제하기 - 현재 시간 id로 저장](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FpASnp%2FbtrqIsJWgJT%2FAAAAAAAAAAAAAAAAAAAAADMWRmia1x-iwvYD-42DTsEgleVMsqzNBYZXfuoTvVQZ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DBv%252BwGkaWQR8ouQix3meFZigWQK0%253D)
[Kossie Coder] 영화 삭제하기 - 현재 시간 id로 저장
// App.js import React, { useState } from 'react'; import './index.css'; import Movie from './components/Movie'; import MovieForm from './components/MovieForm'; function App() { const [movies, setMovies] = useState([]); 🌟const removeMovie = (id) => { console.log(id); // 삭제 버튼 클릭 시 영화 추가할 때 id로 저장한 값 출력 };🌟 const renderMovies = movies.length ? movies.map((movie) => { 🌟// 현재 시간을 담은 id를 키값으로 설정🌟 re..
![[Kossie Coder] 자식 컴포넌트에서 부모 컴포넌트 스테이트 변경하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fb4wH1A%2FbtrqAykTSeO%2FAAAAAAAAAAAAAAAAAAAAAGoMScdmnnXAz16tR4_q8Qs-ORocSMXsK0u7KezSnPLH%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dpbhp6zrOU9WjJhSLlenMYv5%252BAJQ%253D)
[Kossie Coder] 자식 컴포넌트에서 부모 컴포넌트 스테이트 변경하기
// App.js import React, { useState } from 'react'; import './index.css'; import Movie from './components/Movie'; 🌟import MovieForm from './components/MovieForm';🌟 function App() { const [movies, setMovies] = useState([ { title: 'Lami1', year: 2001 }, { title: 'Lami2', year: 2002 }, { title: 'Lami3', year: 2003 }, ]); const renderMovies = movies.map((movie) => { return ; }); 🌟const addMovie = (mo..
![[Kossie Coder] 자식 컴포넌트에 데이터 보내기2 - props (props 생략)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FHSoct%2FbtrquOPbCSN%2FAAAAAAAAAAAAAAAAAAAAAEmmvLc0pNNCgZjv6LljcerucwSYA7nIfNTt1dX3xw9S%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Ds6kp3oN17k%252BIdeuqui2v8B2E8p0%253D)
[Kossie Coder] 자식 컴포넌트에 데이터 보내기2 - props (props 생략)
// App.js import React from 'react'; import './index.css'; 🌟import Movie from './components/Movie';🌟 function App() { const movies = [ { title: 'Lami1', year: 2001 }, { title: 'Lami2', year: 2002 }, { title: 'Lami3', year: 2003 }, ]; const renderMovies = movies.map((movie) => { 🌟return ;🌟 // map을 사용하기 때문에 유니크한 키 필요 }); return ( Movie list {renderMovies} ); } export default App; // Movie.js impor..
![[Kossie Coder] map을 이용한 리액트 반복문](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FlO0oB%2FbtrqvUBcUyS%2FAAAAAAAAAAAAAAAAAAAAAJ_pIssY_EgEgsqBNiOxj-P0pvjNx7DfZObyqw7skHay%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DE8IgWLXnSIsuxj2AFFo6D0hPRmQ%253D)
[Kossie Coder] map을 이용한 리액트 반복문
// App.js import React from 'react'; import './index.css'; function App() { const movies = [ { title: 'Lami1', year: 2001 }, { title: 'Lami2', year: 2002 }, { title: 'Lami3', year: 2003 }, ]; const renderMovies = movies.map((movie) => { return ( // map을 이용할 때는 유니크한 키 필요 {movie.title} {movie.year} ); }); return ( Movie list {renderMovies} ); } export default App; // index.css .movie { display: fl..
![[Kossie Coder] 조건에 따라 컨텐츠 다르게 보여주기 - 조건 렌더링](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FJu6OA%2FbtrqnllwOxo%2FAAAAAAAAAAAAAAAAAAAAAEkaDpGJ5JKMJHulG5a4QNMwMUAYtE3Wj9p3fCEvrqPS%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DyKS%252Be9pYAHoGTGkFhhMQCGL3lfw%253D)
[Kossie Coder] 조건에 따라 컨텐츠 다르게 보여주기 - 조건 렌더링
// App.js import React, { useState, useEffect } from 'react'; import './index.css'; function App() { const [condition, setCondition] = useState(false); const toggle = () => setCondition(!condition); useEffect(() => { console.log('condition :>> ', condition); }, [condition]); const renderCondition = condition ? 'True' : 'False'; return ( Lami {renderCondition} Toggle ); } export default App; /* 유..
![[Kossie Coder] 자식 컴포넌트에 데이터 보내기 - props](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fu01kV%2FbtrquP6oAkZ%2FAAAAAAAAAAAAAAAAAAAAADI_0KvR3SbKG8NS5Fjm0tGZyfdMSLVqn5_t3h8XTaaV%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DKzyt3LBaQzpi9sGcWvGwxM5x42E%253D)
[Kossie Coder] 자식 컴포넌트에 데이터 보내기 - props
// App.js import React, { useState } from 'react'; 🌟import Counter from './components/Counter';🌟 function App() { const [buttonName, setButtonName] = useState('클릭'); const clickButton = () => { setButtonName('click'); }; return ( Lami 🌟🌟 🌟🌟 Click ); } export default App; // App.js 기준 ./components/Counter.js import React, { useState } from 'react'; const Counter = (props) => { const [count, setCo..
![[Kossie Coder] useEffect](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcXpfU6%2FbtrqmNIcCcI%2FAAAAAAAAAAAAAAAAAAAAABsV_BXpwKF2Vm3x9n_bKtorGq6-Rw-cOyH1KWTsGU8m%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DyeKB%252FrvyqJYLQoJDrf0Ro6jvDVA%253D)
[Kossie Coder] useEffect
// App.js import React, { useEffect, useState } from 'react'; function App() { const [count, setCount] = useState(0); const [lami, setLami] = useState(0); useEffect(() => { console.log('count', count, 'lami', lami); }, [count]); useEffect(() => { console.log('first rendering'); }, []); const increment = () => { setCount(count + 1); }; return ( Lami Click setLami(lami + 1)}>Click1 ); } export def..