Web
[React] setState, props
ㅋ. ㅋ
2021. 8. 31. 15:15
지금까지 Vue.js 프로젝트만 해오다 React 프로젝트에 투입되어서 리액트 실습!
React ❤️ Immutable.js – 리액트의 불변함, 그리고 컴포넌트에서 Immutable.js 사용하기 | VELOPERT.LOG
이 포스트는 React 에서는 불변함 (Immutability) 를 지키며 상태 관리를 하는 것을 매우 편하게 해주는 라이브러리 Immutable.js 에 대해서 알아보겠습니다. 서론 리액트를 사용하신다면, Immutability 라는
velopert.com
윗 글에 나온 예시 코드를 활용했다
모든 변수명이 users인게 헷갈려서 변수명을 임의로변경했다
< App.js >
import React, { Component } from 'react';
import UserList from './UserList';
class App extends Component {
id = 3;
state = {
input: '',
userstate: [
{
id: 1,
username: 'hi'
},
{
id: 2,
username: 'jay'
}
]
}
onChange = (e) => {
const { value } = e.target;
this.setState({
input: value
});
}
onButtonClick = (e) => {
this.setState(( {userstate, input }) => ({ // setState시 re-rendering
input: '',
// state.userstate 뒤에 새 user append하고 다시 대입
userstate : userstate.concat({
id: this.id++,
username: input
})
}))
}
render() {
const { onChange, onButtonClick } = this;
const { input, userstate } = this.state;
return (
<div>
<div>
<input onChange={onChange} value={input} />
<button onClick={onButtonClick}>추가</button>
</div>
<h1>사용자 목록</h1>
<div>
<UserList asdf={userstate} />
{/* asdf -> UserList props 로 넘어감 ? */}
</div>
</div>
);
}
}
export default App;
< UserList.js >
import React, { Component } from "react";
import Users from "./Users";
class UserList extends Component {
shouldComponentUpdate(prevProps, prevState) {
return prevProps.asdf !== this.props.asdf;
// return true면 list update 돼서 re-redering
}
renderUsers = () => {
// App.js에서 넘어온 props,,
const { asdf } = this.props;
return asdf.map((usera) => <Users key={usera.id} qwer={usera} />);
// Users 로 넘기는 props, 인자명은 임의로
};
render() {
console.log("UserList 가 렌더링되고 있어요!");
const { renderUsers } = this;
return <div>{renderUsers()}</div>;
}
}
export default UserList;
여기서 아직 모르겠는 것은 Users로 넘길 때 key 값이다.. 이걸 어떻게 쓰는 거지
Vue.js 기억하고 있었으면 알 수 있었을까,, 뷰 다 까먹었어 ㄱ-
< Users.js >
import React, { Component } from "react";
class Users extends Component {
shouldComponentUpdate(prevProps, prevState) {
return this.props.qwer !== prevProps.qwer;
}
render() {
// const { qwer } = this.props; // 이렇게 받아도 되고,,
// console.log("%s가 렌더링 되고있어요!!!", qwer.username);
const { qwer : {username} } = this.props;
// // 이건 qwer로 넘어온 users 객체에서 username 만 쓰겠다는 의미
console.log("%s가 렌더링 되고있어요!!!", username);
return <div>{username}</div>;
// return <div>{qwer.username}</div>;
}
}
export default Users;
리액트 도저언