Введение

Я хотел бы дать обзор того, что представляет собой контент, это в основном простое приложение-счетчик, которое увеличивает и уменьшает значение на 1, а также имеет возможность устанавливать и сбрасывать значение до нуля, чего я достиг с помощью некоторых Реакция перехватывает зависимости, позволяет глубже погрузиться в определение некоторых концепций и их реализаций. Реакция, как мы все знаем, представляет собой среду JavaScript с открытым исходным кодом и библиотеку, разработанную Facebook. Она используется при создании веб-приложения вместе с более интерактивным пользовательским интерфейсом. , чище и эффективнее, чем ванильный JavaScript

Предпосылки

  1. на его ноутбуке должна быть установлена ​​последняя версия Node.js.
  2. интегрированная среда разработки (IDE) очень важна, потому что именно здесь происходит волшебство, будь то Vscode, Atom или любой другой редактор по вашему выбору принимается.
  3. установите Git на свои устройства, которые так много используются разработчиками по всему миру.

Создайте свое приложение React с помощью терминала

  1. откройте командную строку, это может быть PowerShell, git в зависимости от случая.

2. создайте новую папку, используя командную строку "mkdir" имя_реакт_проекта и "cd" для имя_реакт_проекта.

3. установите приложение реакции с помощью командной строки «npx create-react-app my-app», которая затем установит необходимые зависимости, которые я использовал для создания приложения счетчика.

$ mkdir sample

$ cd sample

$ npx create-react-app counter-sample

Содержание

  1. useReducer: яиспользовал useReducer в качестве управления состоянием для управления сложным состоянием вместо хука useState, а затем определял различные действия, включая увеличение, уменьшение, установку и сброс состояния.
export const ACTIONS={
    INCREMENT: 'INCREMENT',
    DECREMENT:"DECREMENT",
    RESET:"RESET",
    SETVALUE:'SETVALUE'
}
const Reducer =(state,action)=>{
switch(action.type){
    case ACTIONS.INCREMENT:
    return {count:state.count +1}
 
    case ACTIONS.DECREMENT:
    return {count:state.count -1}
   
    case ACTIONS.SETVALUE:
    return {count:action.payload}
  
    case ACTIONS.RESET:
    return {count:0}

    default:
        return  {state}
}
}

export default Reducer

Теперь давайте поговорим о реализации обработчика событий, который включает в себя Increment, Decrement, Set и Reset, и это стало возможным благодаря различным случаям, которые мы сделали в нашей функции useReducer, хук useRef используется для очистки ввода после получения значения. Условный оператор в decrementHandler помогает предотвратить переход счетчика к отрицательному значению.

const Counter = () => {
  const InputRef = useRef()

    const Decrement =()=>{
      if(Initialstate.count===0 ){
        return
      }
        dispatch({type:ACTIONS.DECREMENT})
    }
    const Increment =()=>{
        dispatch({type:ACTIONS.INCREMENT})
    }

    const Reset =()=>{
        dispatch({type:ACTIONS.RESET})
    }

    const SetValue =(event)=>{
        event.preventDefault()
      dispatch({type:ACTIONS.SETVALUE,payload:Number(event.target.number.value)})
      InputRef.current.value=''
    }

2. React router: я установил последнюю версию React Router с помощью командной строки (npm install react-router-dom@6), которую я использовал для навигации по разным маршрутам/страницам. моего приложения, ниже приведен фрагмент кода для настройки моего маршрутизатора в моем приложении.

function App() {
  return (
    <div>

    <Routes>
     <Route path='/' element={<NavBar/>}/>
     <Route path='/counter' element={<Counter/>}/>
     <Route path='/errorpage' element={<ErrorPage/>}/>
      <Route path='/error' element={<Errorboundary/>}/>
    </Routes>
   
    </div>
  );
}

export default App;

который я затем обернул с помощью ‹BrowserRouter›‹BrowserRouter/› в моем файле index.js.

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
  <BrowserRouter>
  <App />
  </BrowserRouter>
  </React.StrictMode>
);

3.Панель навигации: я реализовал панель навигации, чтобы можно было легко переходить на разные страницы с помощью маршрутизатора LINK, если быть точным. Я также использовал хук useRef, чтобы сделать панель навигации более отзывчивой, переключая класс. Взгляните на фрагмент кода и поймите лучше. Я также установил материальную иконку пользовательского интерфейса при создании гамбургера с помощью командной строки npm install @mui/icons-material @mui/material @emotion/styled @emotion/react.

import React,{useRef} from 'react'
import CloseIcon from '@mui/icons-material/Close';
import MenuOpenIcon from '@mui/icons-material/MenuOpen';
import {Link} from 'react-router-dom';
import './Nav.css'

const NavBar = () =>{
  const NavRef = useRef()

  const shownavlink =()=>{
    NavRef.current.classList.toggle('responsive-nav')
  }

  return (
   <>
 <header className= 'header'>
      <h1>MICKY</h1>
   
      <nav ref={NavRef}>
      <Link to='counter'>Counter</Link>
      <Link to='/errorpage'>Errropage</Link>
      <Link to='error'>Errorboundary</Link>
     
    <button
    className='nav-btn nav-close'
     onClick={shownavlink}>
      <CloseIcon/>
    </button>
      </nav>
      <button
      className='nav-btn'
       onClick={shownavlink}>
      <MenuOpenIcon/>
      </button>
    </header>
    <div className= 'about-app'>
    <h1>
      welcome to our site 
      </h1>
    </div>
   </>

  )
}

export default NavBar

4. Внедрение SEO: SEO расшифровывается как «поисковая оптимизация». Проще говоря, это означает процесс улучшения вашего сайта, а также повышения его видимости для пользователей при поиске любых тем, связанных с вашей, в любой поисковой системе, такой как Google и Bing. вот несколько шагов о том, как я реализовал это в своей работе

3.1. Я установил его с помощью командной строки npm install -save react-helmet-async. ниже приведен фрагмент кода о том, как реализовать

вот ссылка, если вы хотите узнать больше о SEO

  <Helmet>
  <title>AppCounter</title>
  <meta
    name='description'
    content='the parent root of our Counter App for Altschool Assignment'/>
     <link ref='canonical' href='/'/>
  </Helmet>

4. React-Error-boundary: перехватывает ошибку JavaScript и отображает резервный пользовательский интерфейс вместо отказавшего дерева компонентов. он был установлен с использованием npm i react-error-boundary. всегда есть возможность проверить границу ошибки, нажав кнопку, а также возможность восстановить границу с помощью кнопки

const Errorboundary = () => {

  const [explode, setExplode] = useState(false);

         const test={
          description:'Errorboundary section'
         }

function Bomb() {
  throw new Error("💥 CABOOM 💥");
}
  
  return (
    <>
 <div >
<Link to='/' className='link'>Home</Link>
</div>
 <div className='container-errorboundary'>
    <ErrorBoundary 
    
    FallbackComponent={ErrorFallback}
      onReset={() => setExplode(false)}
      resetKeys={[explode]}
   >
      <h5>{test.description.toUpperCase()}</h5>
      <h4>Error will be thrown once button is clicked</h4>
      <div>
    {explode ? <Bomb /> : null}
    <button onClick={()=>setExplode(state=>!state)}>Click Explode</button>
    </div>
   </ErrorBoundary>
   </div>
    </>
   
  )
}

export default Errorboundary

5. Erropage: я реализовал страницу ошибки, которая должна в случае, если пользователь щелкнет неверный URL-адрес или страницу, он будет уведомлен с помощью резервного пользовательского интерфейса вместе с сообщениемстраница не найдена и есть возможность вернуться на домашнюю страницу, чтобы восстановить приложение.

import React from 'react'
import {Link} from 'react-router-dom';

const ErrorPage = () => {
  return (
    <>
   <div >
<Link to='/' className='link'>Home</Link>
</div>
    <div className='errorpage-cont'>
      opps!!!
      page not found
    </div>
    </>
 
  )
}

export default ErrorPage

6. Размещение/развертывание сайта. Я разместил свое приложение с помощью netlify, но сначала отправил свою работу на github, что позволяет мне размещать ее на netlify. Узнайте больше о том, как размещать на netlify, перейдя по ссылке. Хотя я боролся со своим дизайном, но, может быть, у меня получилось что-то хорошее, все еще надеясь на улучшение с помощью постоянной практики, моя работа был оформлен с помощью vanilla css.

ниже приведена ссылка на демонстрацию моего приложения и репозитории github.

1. GitHub репозиторий

2. прямая ссылка