استفاده از Flux در ReactJS – آموزش ReactJS

reactjs using flux 6191 تصویر

استفاده از Flux در ReactJS

در این بخش چگونگی پیاده سازی و استفاده از الگوی Flux در برنامه های ReactJS را بررسی خواهیم کرد. ما از Redux استفاده می کنیم. هدف از ایجاد این بخش، ارائه ساده ترین مثال ها برای هر قطعه مورد نیاز به منظور اتصال Redux و React است.

مرحله اول: نصب Redux

در این مرحله ما Redux را با استفاده از دستور زیر و خط فرمان نصب می کنیم.

C:\Users\username\Desktop\reactApp>npm install --save react-redux

مرحله دوم : ایجاد فایل ها و پوشه ها

در این مرحله ما پوشه ها و فایل های مورد نیاز برای action ها، reducer ها و کامپوننت های خود را ایجاد می کنیم.

C:\Users\Tutorialspoint\Desktop\reactApp>mkdir actions
C:\Users\Tutorialspoint\Desktop\reactApp>mkdir components
C:\Users\Tutorialspoint\Desktop\reactApp>mkdir reducers
C:\Users\Tutorialspoint\Desktop\reactApp>type nul > actions/actions.js
C:\Users\Tutorialspoint\Desktop\reactApp>type nul > reducers/reducers.js
C:\Users\Tutorialspoint\Desktop\reactApp>type nul > components/AddTodo.js
C:\Users\Tutorialspoint\Desktop\reactApp>type nul > components/Todo.js
C:\Users\Tutorialspoint\Desktop\reactApp>type nul > components/TodoList.js

 بعد از انجام این کار ساختار پوشه مانند نمونه زیر خواهد بود:

react redux folder structure 6191 تصویر

مرحله سوم : Action ها

Action ها شیء های جاوا اسکریپت هستند که از پراپرتی type به منظور اطلاع دادن در مورد داده هایی که باید به Store ارسال شود، استفاده می کنند. ما اکشن ADD_TODO را برای اضافه کردن آیتم جدید به لیست خود تعریف کرده ایم. تابع addTodo یک سازنده action است که به عنوان خروجی یک نوع از action باز می گرداند و برای هر آیتم تولید شده یک شناسه تنظیم می کند.

محتوای فایل actions/actions.js:

export const ADD_TODO = 'ADD_TODO'
let nextTodoId = 0;
export function addTodo(text) {
   return {
      type: ADD_TODO,
      id: nextTodoId++,
      text
   };
}

مرحله چهارم : Reducer ها

در حالی که action ها فقط باعث تغییر در برنامه می شوند، reducer ها این Action ها را مشخص می کنند. ما برای جستجوی یک اکشن ADD_TODO از دستور switch استفاده می کنیم. Reducer تابعی است که دو پارامتر (state و action) برای محاسبه را می گیرد و یک state به روز رسانی شده باز می گرداند.

تابع اول به منظور ایجاد یک آیتم جدید استفاده می شود در حالی که تابع دوم برای اضافه کردن آن آینم به لیست استفاده می شود. در نهایت ما از یک تابعی کمکی به نام combineReducers برای اضافه کردن reducer های جدیدی که ممکن است در آینده لازم شوند، استفاده می کنیم.

محتوای فایل reducers/reducers.js:

import { combineReducers } from 'redux'
import { ADD_TODO } from '../actions/actions'
function todo(state, action) {
   switch (action.type) {
      case ADD_TODO:
         return {
            id: action.id,
            text: action.text,
         }
      default:
         return state
   }
}
function todos(state = [], action) {
   switch (action.type) {
      case ADD_TODO:
         return [
            ...state,
            todo(undefined, action)
         ]
      default:
         return state
   }
}
const todoApp = combineReducers({
   todos
})
export default todoApp

مرحله پنجم : Store

Store محلی است که state برنامه در آن نگه داری می شود. زمانی که شما reducer ها را داشته باشید، ایجاد store بسیار راحت است.

محتوای فایل main.js:

import React from 'react'
import { render } from 'react-dom'
import { createStore } from 'redux'
import { Provider } from 'react-redux'
import App from './App.jsx'
import todoApp from './reducers/reducers'
let store = createStore(todoApp)
let rootElement = document.getElementById('app')
render(
   <Provider store = {store}>
      <App />
   </Provider>,
   rootElement
)

مرحله ششم : کامپوننت ریشه (root)

کامپوننت App به عنوان کامپوننت root برنامه در نظر گرفته میشود و فقط این کامپوننت باید از وضعیت redux آگاه باشد. بخش مهمی که باید به آن توجه کنید، تابع connect است که به منظور اتصال کامپوننت ریشه App به Store استفاده می شود.

تابع connect تابع select را به عنوان آرگومان می گیرد. خود تابع select به عنوان آرگومان state را از Store میگرد و پراپرتی (visibleTodos) را باز می گرداند که می تواینم از آن در کامپوننت خودمان استفاده کنیم.

محتوای فایل App.jsx:

import React, { Component } from 'react'
import { connect } from 'react-redux'
import { addTodo } from './actions/actions'
import AddTodo from './components/AddTodo.js'
import TodoList from './components/TodoList.js'
class App extends Component {
   render() {
      const { dispatch, visibleTodos } = this.props
      
      return (
         <div>
            <AddTodo onAddClick = {text =>dispatch(addTodo(text))} />
            <TodoList todos = {visibleTodos}/>
         </div>
      )
   }
}
function select(state) {
   return {
      visibleTodos: state.todos
   }
}
export default connect(select)(App);

مرحله هفتم : کامپوننت های دیگر

سایر کامپوننت ها نباید از وضعیت redux آگاهی داشته باشند.

محتوای فایل components/AddTodo.js:

import React, { Component, PropTypes } from 'react'
export default class AddTodo extends Component {
   render() {
      return (
         <div>
            <input type = 'text' ref = 'input' />
				
            <button onClick = {(e) => this.handleClick(e)}>
               Add
            </button>
         </div>
      )
   }
   handleClick(e) {
      const node = this.refs.input
      const text = node.value.trim()
      this.props.onAddClick(text)
      node.value = ''
   }
}

محتوای فایل components/Todo.js:

import React, { Component, PropTypes } from 'react'
export default class Todo extends Component {
   render() {
      return (
         <li>
            {this.props.text}
         </li>
      )
   }
}

محتوای فایل components/TodoList.js:

import React, { Component, PropTypes } from 'react'
import Todo from './Todo.js'
export default class TodoList extends Component {
   render() {
      return (
         <ul>
            {this.props.todos.map(todo =>
               <Todo
                  key = {todo.id}
                  {...todo}
               />
            )}
         </ul>
      )
   }
}

 

react redux example 6191 تصویر

نوشته استفاده از Flux در ReactJS – آموزش ReactJS اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *