20230206 [react] - 반복되는 컴포넌트

lionloopy·2023년 2월 6일
0

리액트

목록 보기
3/18

styling

import React from "react";

const App = () => {
  const style = {
    padding: "100px",
    display: "flex",
    gap: "12px",
  };

  const squareStyle = {
    width: "100px",
    height: "100px",
    border: "1px solid green",
    borderRadius: "10px",
		display: "flex",
    alignItems: "center",
    justifyContent: "center",
  };

  return (
    <div style={style}>
      <div style={squareStyle}>감자</div>
      <div style={squareStyle}>고구마</div>
      <div style={squareStyle}>오이</div>
      <div style={squareStyle}>가지</div>
      <div style={squareStyle}>옥수수</div>
    </div>
  );
};

export default App;

map, filter

const App =()=> {
  
  const vegArr = ['감자','고구마','옥수수','오이','가지']
  
  return(
    <div className='app-style'>
      {
        vegArr.filter((item) => {
          return item !='오이'
        }).map((item) => {
          return <div className='square-style'>{item}</div>
        })
      }
    </div>
  )
}

요소 추가하기

const App =() => {
	//1.state를 객체를 포함한 배열로 만들어준다.
  const [users, setUsers] = useState([
      { id:1, age:30, name:'중씨'},
      { id:2, age:24, name:'송씨'},
      { id:3, age:21, name:'김씨'},
      { id:4, age:29, name:'구씨'},
    ])
    //5.이름과 나이 state 생성
    const [name, setName] = useState('')
    const [age, setAge] = useState('')
    
    //6.input값의 onchange값을 함수로 만들어준다.
    //ssetName(event.target.value)로 입력한 값만 출력
    const nameChange = (event) => {
      setName(event.target.value) 
    }
    const agechange = (event) => {
      setAge(event.target.value)
    }
    //8.onclick에 해당하는 함수를 만든다.
    //새로 입력 후 추가를 눌렀을 때 users.length에서 +1 증가하면 된다.
    //9.setUsers([...users, addNew])로 users의 state를 바꿔준다.
    //원래 있었던 users를 ...users로 풀고 
    const clickButton = () => {
      const addNew = {
        id: users.length +1,
        age: age,
        name: name,
      }

      setUsers([...users, addNew])
    }

  return (
  	//3.JSX영역, 이름과 나이값을 받을 input을 만들고, 추가할 버튼을 만든다.
    //4.이름과 나이는 입력값에 따라 변하기 때문에 state를 생성한다.
    //7.버튼에 onclick이벤트를 넣어주고 함수를 넣어준다.
    <div>
      <div>
      이름 : <input value = {name} onChange ={nameChange}/>{name} <br/>
      나이 : <input value = {age} onChange ={agechange}/>{age} <br/>
      <button onClick={clickButton}>추가</button>
      </div>
      //2.이름과 나이를 정렬하기 위해 map함수를 사용한다.
      //여기서 css square-style적용
      <div className='app-style'>
      {
      users.map((item) => {
        return (
          <div key = {item.id} className='square-style'>{item.age} - {item.name}</div>
        )
      })
    }

  </div>
    </div>

  )
  }

요소 삭제하기

const App = () => {
  const [users, setUsers] = useState([
    {id:1, age: 30, name:'김씨'},
    {id:2, age: 20, name:'박씨'},
    {id:3, age: 50, name:'최씨'},
    {id:4, age: 40, name:'이씨'},
  ])

  const [name, setName] = useState('')
  const [age, setAge] = useState('')

  const nameChange = (event) => {
    setName(event.target.value)
  }

  const ageChange = (event)=> {
    setAge(event.target.value)
  }

  const clickButton = () => {
    const addNew = {
      id: users.length + 1,
      age: age,
      name: name
    }

    setUsers([...users, addNew])
  }
  
  //2.removeButton함수를 만들고, 필터를 걸어서
  //잡아 놓은 id와 user의 id가 같지 않은 것만 보이게 한다.
  const removeButton = (id) => {
    const newUsers = users.filter(user => user.id != id)
    setUsers(newUsers)
  }

return (
  <div>
    <div>
    이름 : <input value = {name} onChange ={nameChange}/>{name} <br/>
    나이 : <input value = {age} onChange ={ageChange}/>{age} <br/>
      <button onClick={clickButton}>추가</button>
    </div>
    <div className='app-style'>
      {
        users.map((item) => {
          return (
            <div key = {item.id} className='square-style'>{item.age} - {item.name}
            //1.삭제 버튼을 만들고, onclick이라는 이벤트를 넣는다.
            //버튼 자체에서 매개변수를 잡기 위해 함수 형식으로 넣어준다.
            //이때 버튼이 잡고있는 key는 위에 div에 있는 key와 같다.
            <button onClick={() => removeButton(item.id)}>삭제</button>
            </div>
          )
        })
      }

    </div>
  </div>
)
}
profile
Developer ʕ ·ᴥ·ʔ ʕ·ᴥ· ʔ

0개의 댓글