実施保留事項リスト(基礎)
15473 ワード
切り替え機能付きtodoListを実現しました.
Todos to componentsディレクトリ.jsファイルを生成し、コードを実装します.
Todos.jsファイルにはTodoItem、TodoList、Todosの3つのコンポーネントが作成されています.複数のコンポーネントを作成するのは、コンポーネントのレンダリング性能を最適化するためです.1つのファイルにすべてのコンテンツを作成したり、異なるファイルに分離したりすることができます.
TodosContainerはコンテナディレクトリにあります.jsファイルを生成し、コードを実装します.
ブラウザで正常にレンダリングされていることがわかります.
あつりょくそし
Todos to componentsディレクトリ.jsファイルを生成し、コードを実装します.
Todos.jsファイルにはTodoItem、TodoList、Todosの3つのコンポーネントが作成されています.複数のコンポーネントを作成するのは、コンポーネントのレンダリング性能を最適化するためです.1つのファイルにすべてのコンテンツを作成したり、異なるファイルに分離したりすることができます.
Todos.js
import React, {useState} from 'react';
const TodoItem = React.memo(function TodoItem({ todo, onToggle }){
return(
<li
style={{textDecoration: todo.done ? 'line-through' : 'none'}}
onClick={()=> onToggle(todo.id)}
>
{todo.text}
</li>
)
})
const TodoList = React.memo(function TodoList({ todos, onToggle }){
return (
<ul>
{todos.map(todo => (
<TodoItem key={todo.id} todo={todo} onToggle={onToggle} />
))}
</ul>
)
});
function Todos({ todos, onCreate, onToggle}){
const [text, setText] = useState('');
const onChange = e => setText(e.target.value);
const onSubmit = e => {
e.preventDefault();
onCreate(text);
setText('');
}
return (
<div>
<form onSubmit={onSubmit}>
<input
value={text}
placeholder="할 일을 입력하세요..."
onChange={onChange}
/>
<button type="submit">ADD</button>
</form>
<TodoList todos={todos} onToggle={onToggle} />
</div>
)
}
export default Todos;
アプリでレンダリングします.import React from 'react';
import CounterContainer from './containers/CounterContainer';
import './App.css';
import TodosContainer from './containers/TodosContainer';
function App() {
return (
<div>
<CounterContainer />
<hr />
<TodosContainer />
</div>
);
}
export default App;
コンテナ構成部品
TodosContainerはコンテナディレクトリにあります.jsファイルを生成し、コードを実装します.
TodosContainer.js
import React, { useCallback } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import Todos from '../components/Todos';
import { addTodo, toggleTodo } from '../modules/todos';// 모듈에서 액션 생성함수를 가져온다.
function TodosContainer(){
const todos = useSelector(state => state.todos);
const dispatch = useDispatch();
const onCreate = text => dispatch(addTodo(text));
const onToggle = useCallback(id => dispatch(toggleTodo(id)), [dispatch]);
return <Todos todos={todos} onCreate={onCreate} onToggle={onToggle}/>;
}
export default TodosContainer;
ブラウザで正常にレンダリングされていることがわかります.
Reference
この問題について(実施保留事項リスト(基礎)), 我々は、より多くの情報をここで見つけました https://velog.io/@hyunn/할-일-목록-구현하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol