Skip to content

Instantly share code, notes, and snippets.

View kaineer's full-sized avatar
:octocat:
⌨️ 🖱️

Sergey Kluchkovsky kaineer

:octocat:
⌨️ 🖱️
View GitHub Profile
@kaineer
kaineer / NewTask.jsx
Created March 4, 2025 11:01
new-task
import classes from './NewTask.module.css'
import { TodosSlice } from '../../slices/todo';
import { useDispatch } from 'react-redux'
export const NewTask = ({ addTask }) => {
const { actions: { appendTask } } = TodosSlice;
const dispatch = useDispatch();
const handleEnter = (e) => {
if (e.key === 'Enter') {
import { useDispatch } from 'react-redux';
import { TodosSlice } from '../../slices/todo'
import classes from './Task.module.css'
import clsx from 'clsx'
export const Task = ({ task }) => {
const { actions: { removeTask, toggleTask } } = TodosSlice;
const dispatch = useDispatch();
return (
@kaineer
kaineer / TaskList.jsx
Created March 4, 2025 10:59
tasklist
import { Task } from './Task'
import { TodosSlice } from '../../slices/todo';
import { useSelector } from 'react-redux';
export const TaskList = () => {
const { selectors: { getTasks } } = TodosSlice;
const tasks = useSelector(getTasks);
return (
<ul>
@kaineer
kaineer / index.jsx
Created March 4, 2025 10:58
main-component
//
import { useState, useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { NewTask } from './NewTask'
import { TaskList } from './TaskList'
import { TodosSlice } from '../../slices/todo';
export const Todos = () => {
const {
selectors: { getTasks },
@kaineer
kaineer / todo.js
Created March 4, 2025 10:56
todo-slice.js
//
import { createSlice } from '@reduxjs/toolkit'
const localStorageKey = 'todos/items';
const initialState = () => {
try {
const storageTasks = JSON.parse(
localStorage.getItem(localStorageKey));
return { tasks: storageTasks }
@kaineer
kaineer / page-user.jsx
Last active February 25, 2025 09:35
UserPage
import { useEffect, useState, useRef } from 'react';
import { useParams } from 'react-router-dom'
import classes from './page-user.module.css'
const InputRow = ({ id, title, value, setValue }) => {
return (
<div className={ classes.row }>
<label htmlFor={ id }>{ title }</label>
<input
@kaineer
kaineer / page-user.jsx
Last active February 21, 2025 09:15
users page
import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom'
import classes from './page-user.module.css'
export const PageUser = () => {
const { id } = useParams();
const [ user, setUser ] = useState({});
useEffect(() => {
@kaineer
kaineer / PageFetch.jsx
Last active February 18, 2025 10:17
Работа с fetch()
import classes from './page.module.css'
import { useRef, useState } from 'react'
export const PageFetch = () => {
const urlRef = useRef("");
const resultRef = useRef("");
const bodyRef = useRef("{}");
const [method, setMethod] = useState("GET");
const hasBody = ["POST", "PUT"].includes(method);
@kaineer
kaineer / lesson7.md
Created February 14, 2025 11:52
lesson7

План занятия


Часть первая, useState, onChange

  • Создаем страницу, например /page4
  • На страницу помещаем два компонента
  • В каждом компоненте рендерим один текстовый инпут
  • Изменение текста в одном инпуте должно приводить к немедленному изменению текста в другом и наоборот

Ставим redux toolkit

$ npm install -SE react-redux @reduxjs/toolkit

Создаем слайс, который будет хранить состояние

// src/slices/color.js