Test1
import React, { useState } from 'react';
import Test1Sub from './Test1Sub';
const dataList = [
{id:1, name:'김철수'},
{id:2, name:'김다미'},
{id:3, name:'최진수'},
]
const Test1 = () => {
const [data, setData] = useState(dataList)
//추가
const onAdd1 = (name) => {
setData( data.concat({id:4, name:name}) )
}
const onAdd2 = (text) => {
setData([
...data,
{
id:5, name:text
}
])
}
//삭제
const onDel1 = (num) => {
setData(data.filter(item => item.id != num))
}
const onDel2 = (id) => {
setData(data.filter(item => item.id != id))
}
//수정
const onMod1 = (id) => {
setData(data.map(item => {
if(item.id === id) {
return {
...item,
name: '유재석'
}
}else {
return item
}
}))
}
const onMod2 = (id) => {
setData(data.map(item =>item.id === id ? {...item, name:'강호동'} : item))
}
return (
<div>
<Test1Sub onAdd1={onAdd1} onAdd2={onAdd2} onDel1={onDel1}
onDel2={onDel2} onMod1={onMod1} onMod2={onMod2}
/>
</div>
);
};
export default Test1;
TestSub
import React from 'react';
const Test1Sub = ({onAdd1, onAdd2, onDel1, onDel2, onMod1, onMod2}) => {
return (
<div>
<p>
<button onClick={() => onAdd1('김태리')}>추가</button>
<button onClick={() => onAdd2('김철수')}>추가</button>
</p>
<p>
<button onClick={() => onDel1(1)}>삭제</button>
<button onClick={() => onDel2(2)}>삭제</button>
</p>
<p>
<button onClick={() => onMod1(1)}>수정</button>
<button onClick={() => onMod2(2)}>수정</button>
</p>
</div>
);
};
export default Test1Sub;
필요한 문법
1. concat : 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환함
구문
CONCAT(text1, [text2],…)
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);
console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
Array.prototype.concat() - JavaScript | MDN
concat() 메서드는 인자로 주어진 배열이나 값들을 기존 배열에 합쳐서 새 배열을 반환합니다.
developer.mozilla.org
2. filter : 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환함
구문
arr.filter(callback(element[, index[, array]])[, thisArg])
const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.length > 6);
console.log(result);
// expected output: Array ["exuberant", "destruction", "present"]
3. map : 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환함
구문
arr.map(callback(currentValue[, index[, array]])[, thisArg])
const array1 = [1, 4, 9, 16];
// pass a function to map
const map1 = array1.map(x => x * 2);
console.log(map1);
// expected output: Array [2, 8, 18, 32]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map
Array.prototype.map() - JavaScript | MDN
map() 메서드는 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환합니다.
developer.mozilla.org
4. 삼항연산자
구문
condition ? exprIfTrue : exprIfFalse
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
삼항 조건 연산자 - JavaScript | MDN
조건부 삼항 연산자는 JavaScript에서 세 개의 피연산자를 취할 수 있는 유일한 연산자입니다. 맨 앞에 조건문 들어가고. 그 뒤로 물음표(?)와 조건이 참truthy이라면 실행할 식이 물음표 뒤로 들어
developer.mozilla.org
5. 얕은복사 vs 깊은복사
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Object.assign() - JavaScript | MDN
Object.assign() 메서드는 출처 객체들의 모든 열거 가능한 자체 속성을 복사해 대상 객체에 붙여넣습니다. 그 후 대상 객체를 반환합니다.
developer.mozilla.org
+ Math.random
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/random
Math.random() - JavaScript | MDN
Math.random() 함수는 0 이상 1 미만의 구간에서 근사적으로 균일한(approximately uniform) 부동소숫점 의사난수를 반환하며, 이 값은 사용자가 원하는 범위로 변형할 수 있다. 난수 생성 알고리즘에 사용
developer.mozilla.org
+ split()
split()메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눈다.
const str = 'The quick brown fox jumps over the lazy dog.';
const words = str.split(' ');
console.log(words[3]);
// expected output: "fox"
const chars = str.split('');
console.log(chars[8]);
// expected output: "k"
const strCopy = str.split();
console.log(strCopy);
// expected output: Array ["The quick brown fox jumps over the lazy dog."]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/split
String.prototype.split() - JavaScript | MDN
split() 메서드는 String 객체를 지정한 구분자를 이용하여 여러 개의 문자열로 나눕니다.
developer.mozilla.org
import React, { useRef, useState } from 'react';
const Test3 = () => {
const no = useRef(1)
const [data, setData] = useState([])
const names = '김다미, 김태리, 최우식, 김희선, 송혜교, 전지현, 강호동, 이승기, 제시, 송소희, 유재석, 배수지, 박보영, 박서준, 한예슬'.split(',')
//String 객체메서드
const onAdd = () => {
// const ran = names의 개수에서 랜덤으로 처리
// text : names를 배열처리해서 ran값으로 나오게
const ran = Math.floor(Math.random() * names.length)
setData([
...data,
{
id: no.current++ ,
text: names[ran]
}
])
}
return (
<>
<h2>데이터추가</h2>
<button onClick={onAdd}>추가</button>
<hr />
<ul>
{
data.map( item => <li key={item.id}>{item.id}/{item.text}</li>)
}
</ul>
</>
);
};
export default Test3;
'React' 카테고리의 다른 글
[React] react-hook-form(Material UI 로그인 페이지 구현) (0) | 2022.06.21 |
---|---|
[React] 약관동의 필수선택 (0) | 2022.06.21 |
[React] useRef 사용해서 input 값 비워지고 커서 깜빡거리게 구현 (0) | 2022.06.19 |
[React] find 활용하여 첫 번째 요소의 값 반환하기 (0) | 2022.06.14 |
vite로 react 프로젝트 생성 (vite 세팅방법) (0) | 2022.06.13 |