MDN React 튜토리얼 복습 #2
전치
MDN의 React 튜토리얼을 배운 것을 복습하고 있습니다.
이 기사 의 #2입니다
본 기사에서는 「컴포넌트화」에 대해 복습하고 있습니다.
뭔가 실수가 있으면 지적해 주시면 매우 격려가 됩니다.
React 앱 구성
コンポーネント化
… 앱내의 요소를 분할해 가 관리, 기술하기 쉽게 해 가는 것.
튜토리얼에서는 아래와 같은 긴 것 같은 JSX를 서서히 컴퍼넌트화해 간다
App.jsfunction App(props) {
return (
<div className="todoapp stack-large">
<h1>TodoMatic</h1>
<form>
<h2 className="label-wrapper">
<label htmlFor="new-todo-input" className="label__lg">
What needs to be done?
</label>
</h2>
<input
type="text"
id="new-todo-input"
className="input input__lg"
name="text"
autoComplete="off"
/>
<button type="submit" className="btn btn__primary btn__lg">
Add
</button>
</form>
<div className="filters btn-group stack-exception">
<button type="button" className="btn toggle-btn" aria-pressed="true">
<span className="visually-hidden">Show </span>
<span>all</span>
<span className="visually-hidden"> tasks</span>
{// ...略}
컴포넌트화
우선 각todo를li태그를 사용하여 기술하고 있는 아래 부분
App.js{// ...略}
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-0" type="checkbox" defaultChecked={true} />
<label className="todo-label" htmlFor="todo-0">
Eat
</label>
</div>
<div className="btn-group">
<button type="button" className="btn">
Edit <span className="visually-hidden">Eat</span>
</button>
<button type="button" className="btn btn__danger">
Delete <span className="visually-hidden">Eat</span>
</button>
</div>
</li>
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-1" type="checkbox" />
<label className="todo-label" htmlFor="todo-1">
Sleep
</label>
{// ...略}
우선은 적절한 컴퍼넌트명으로 파일을 작성한다.
mkdir src/component
touch src/component/Todo.js
Todo.js
내에서 function 을 정의하고 return() 으로 대상의 todo 리스트의 제일 최초의 요소만을 돌려주도록 합니다.
Todo.js{// 定義と同時にエクスポートもしている}
export default function Todo() {
return (
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-0" type="checkbox" defaultChecked={true} />
<label className="todo-label" htmlFor="todo-0">
Eat
</label>
</div>
<div className="btn-group">
<button type="button" className="btn">
Edit <span className="visually-hidden">Eat</span>
</button>
<button type="button" className="btn btn__danger">
Delete <span className="visually-hidden">Eat</span>
</button>
</div>
</li>
);
}
왜 최초의 요소만인가 하면, id, defaultChecked, value의 값을 제외해 구성이 같기 때문입니다.
완성된 구성 요소를 App.js에서 로드해 봅니다.
App.js{// todoコンポーネントをインポート}
import Todo from "./components/Todo";
{// ...略}
<ul
role="list"
className="todo-list stack-large stack-exception"
aria-labelledby="list-heading"
>
<Todo />
<Todo />
<Todo />
</ul>
{// ...略}
그러나 이대로는 같은 태스크를 3회 표시해 버리는 것뿐입니다. 각각의 id.defaultChecked,value 의 값을 독특한 것으로 하지 않으면 안됩니다. 그래서 App.js의 부모 컴포넌트인 index.js에 각각의todo를 정의해 버립니다.
index.js{// ...略}
const DATA = [
{ id: "todo-0", name: "Eat", completed: true },
{ id: "todo-1", name: "Sleep", completed: false },
{ id: "todo-2", name: "Repeat", completed: false }
];
ReactDOM.render(<App tasks={DATA} />, document.getElementById('root'));
{// ...略}
이렇게하면 App.js에서 props.tasks를 사용하여 값을받을 수 있습니다.
하지만, 이것을 그대로 표시해 버리면 아래와 같이 대입한 값이 그대로 표시되어 버립니다. (이름만 표시)
그래서 위의 map() 함수에서 tote 컴포넌트를 반환할 필요도 나옵니다.
App.js{// ...略}
const taskList = tasks.map(task => (
<Todo
id={task.id}
name={task.name}
completed={task.completed}
key={task.id}
toggleTaskCompleted={toggleTaskCompleted}
/>
)
);
{// ...略}
다른 부분도 같은 요령으로 컴퍼넌트화해 갑니다.
끝에
다음 기사에서는 「이벤트」에 대해 복습해 가고 싶습니다.
Reference
이 문제에 관하여(MDN React 튜토리얼 복습 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaiito/items/a781cfef2c7421831b9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
コンポーネント化
… 앱내의 요소를 분할해 가 관리, 기술하기 쉽게 해 가는 것.튜토리얼에서는 아래와 같은 긴 것 같은 JSX를 서서히 컴퍼넌트화해 간다
App.js
function App(props) {
return (
<div className="todoapp stack-large">
<h1>TodoMatic</h1>
<form>
<h2 className="label-wrapper">
<label htmlFor="new-todo-input" className="label__lg">
What needs to be done?
</label>
</h2>
<input
type="text"
id="new-todo-input"
className="input input__lg"
name="text"
autoComplete="off"
/>
<button type="submit" className="btn btn__primary btn__lg">
Add
</button>
</form>
<div className="filters btn-group stack-exception">
<button type="button" className="btn toggle-btn" aria-pressed="true">
<span className="visually-hidden">Show </span>
<span>all</span>
<span className="visually-hidden"> tasks</span>
{// ...略}
컴포넌트화
우선 각todo를li태그를 사용하여 기술하고 있는 아래 부분
App.js
{// ...略}
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-0" type="checkbox" defaultChecked={true} />
<label className="todo-label" htmlFor="todo-0">
Eat
</label>
</div>
<div className="btn-group">
<button type="button" className="btn">
Edit <span className="visually-hidden">Eat</span>
</button>
<button type="button" className="btn btn__danger">
Delete <span className="visually-hidden">Eat</span>
</button>
</div>
</li>
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-1" type="checkbox" />
<label className="todo-label" htmlFor="todo-1">
Sleep
</label>
{// ...略}
우선은 적절한 컴퍼넌트명으로 파일을 작성한다.
mkdir src/component
touch src/component/Todo.js
Todo.js
내에서 function 을 정의하고 return() 으로 대상의 todo 리스트의 제일 최초의 요소만을 돌려주도록 합니다.Todo.js
{// 定義と同時にエクスポートもしている}
export default function Todo() {
return (
<li className="todo stack-small">
<div className="c-cb">
<input id="todo-0" type="checkbox" defaultChecked={true} />
<label className="todo-label" htmlFor="todo-0">
Eat
</label>
</div>
<div className="btn-group">
<button type="button" className="btn">
Edit <span className="visually-hidden">Eat</span>
</button>
<button type="button" className="btn btn__danger">
Delete <span className="visually-hidden">Eat</span>
</button>
</div>
</li>
);
}
왜 최초의 요소만인가 하면, id, defaultChecked, value의 값을 제외해 구성이 같기 때문입니다.
완성된 구성 요소를 App.js에서 로드해 봅니다.
App.js
{// todoコンポーネントをインポート}
import Todo from "./components/Todo";
{// ...略}
<ul
role="list"
className="todo-list stack-large stack-exception"
aria-labelledby="list-heading"
>
<Todo />
<Todo />
<Todo />
</ul>
{// ...略}
그러나 이대로는 같은 태스크를 3회 표시해 버리는 것뿐입니다. 각각의 id.defaultChecked,value 의 값을 독특한 것으로 하지 않으면 안됩니다. 그래서 App.js의 부모 컴포넌트인 index.js에 각각의todo를 정의해 버립니다.
index.js
{// ...略}
const DATA = [
{ id: "todo-0", name: "Eat", completed: true },
{ id: "todo-1", name: "Sleep", completed: false },
{ id: "todo-2", name: "Repeat", completed: false }
];
ReactDOM.render(<App tasks={DATA} />, document.getElementById('root'));
{// ...略}
이렇게하면 App.js에서 props.tasks를 사용하여 값을받을 수 있습니다.
하지만, 이것을 그대로 표시해 버리면 아래와 같이 대입한 값이 그대로 표시되어 버립니다. (이름만 표시)
그래서 위의 map() 함수에서 tote 컴포넌트를 반환할 필요도 나옵니다.
App.js
{// ...略}
const taskList = tasks.map(task => (
<Todo
id={task.id}
name={task.name}
completed={task.completed}
key={task.id}
toggleTaskCompleted={toggleTaskCompleted}
/>
)
);
{// ...略}
다른 부분도 같은 요령으로 컴퍼넌트화해 갑니다.
끝에
다음 기사에서는 「이벤트」에 대해 복습해 가고 싶습니다.
Reference
이 문제에 관하여(MDN React 튜토리얼 복습 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kaiito/items/a781cfef2c7421831b9b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(MDN React 튜토리얼 복습 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kaiito/items/a781cfef2c7421831b9b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)