freeCodeCamp/guide/arabic/redux/tutorial/index.md

275 lines
12 KiB
Markdown

---
title: React Redux Basic Setup
localeTitle: رد فعل Redux الإعداد الأساسي
---
## رد فعل Redux الإعداد الأساسي
في هذا الدليل ، سيعرض على القارئ كيفية إعداد تطبيق React و Redux بسيط.
وهو يعتمد على مبدأ إنشاء تطبيق [Node.js](https://nodejs.org/) بالفعل وتشغيله مع [Express](https://expressjs.com/) و [Webpack](https://webpack.github.io/) .
## التركيب
بافتراض أن كل شيء يتم إعداده ويعمل بشكل صحيح هناك بعض الحزم التي تحتاج إلى إضافة لكي يعمل Redux مع React.
افتح محطة طرفية داخل مجلد المشروع الذي تم إنشاؤه وقم بإصدار الأمر التالي
`npm install --save react react react-dom react-redux react-router redux
`
ما يفعله الأمر أعلاه هو تثبيت الحزم محليًا وإضافة مرجع إلى ملف package.json تحت تبعيات.
أضف أيضًا إلى المتصفح الذي اخترته الأداة التالية [Redux Dev Tools](https://github.com/zalmoxisus/redux-devtools-extension) .
سيسمح هذا للمطور برؤية حالة التطبيق والتغييرات والإجراءات التي يتم تشغيلها أيضًا.
## هيكل المجلد
مع تثبيت جميع الاعتمادات ، ينصح بشدة بإنشاء بنية مجلدات داخل التطبيق الخاص بك تشبه إلى آخر رفع مستوى للتنظيم ورمز أفضل.
`project_root
│ index.js
|
└───client
| App.jsx
| NotFound.jsx
|
└───common
└───actions
| │ appActions.js
|
└───constants
| │ Actiontypes.js
|
└───reducers
| │ appReducer.js
└───store
│ store.js
`
## وصف مكونات التطبيق وكيف يتفاعلون مع أنفسهم ومع redux
## تطبيق نقطة دخول التطبيق
* /project\_root/index.js
* هل نقطة الإدخال الخاصة بالتطبيق ستحتوي على نقطة الإدخال لأي متجر ، وستعرض ملف App.jsx.
خوار هو مثال على الرمز الذي سيتم الإعلان عنه في الملف
`import React from 'react';
import {render} from 'react-dom';
import {Router,Route,browserHistory} from 'react-router';
import {Provider} from "react-redux";
import store from "../common/store/store";
import App from '../client/App';
import NotFound from '../client/notFound';
render(
<Provider store={store}>
<Router history={browserHistory}>
<Route path="/" component={App} />
<Route path="*" component={NotFound}/>
</Router>
</Provider>,
document.getElementById('root')
);
`
في هذا المثال ، تتم إضافة واردات ردود الفعل المعتادة إلى الملف ، ولكن أيضًا بعض الإضافات الجديدة ، مثل جهاز التوجيه ، والمسار ، والمتصفح.
هذه هي المسؤولة عن التعامل مع الطرق إذا كانت هناك حاجة إلى التطبيق.
وأيضا حيث يتم إضافة مخزن التطبيقات ويسمح للعمل في التطبيق.
## تطبيق مكون التطبيق
الملف التالي:
* /client/App.jsx
* هذا الملف هو ملف التطبيق الأساسي ، وحيثما يتفاعل كل من التفاعل والارتداد بين بعضهما البعض.
``import React, { Component } from 'react';
import {connect} from 'react-redux';
import PropTypes from 'prop-types';
import {ActionA,ActionB,ActionC} from '../common/actions/appActions';
class App extends Component{
// example of triggering the action inside a component
foo=()=>{
this.props.doStringMessage(`Hello World`);
}
//default render function of the component
render(){
return(
// the base component
);
}
}
/**
* es6 fat arrow function to get information from the application state
* @param {*} state current state of the application
*/
const mapStateToProps=state=>{
return {
ArrayValue:state.example.exapleArray,
StringMessage:state.example.exampleString,
bookApploggedIn:state.example.exampleBool,
ObjectValue:state.example.exampleObject
};
};
/**
* es6 fat arrow function to connect the actions declared in the action file to the the component as if they were common react props
* @param {*} dispatch function send to action file to be later processed in the reducer
*/
const mapDispatchToProps=dispatch=>{
return {
doStringMessage:(value)=>{
dispatch(ActionA(value));
},
getArrayItems:()=>{
dispatch(ActionB());
},
doBooleanChange:(value)=>{
dispatch(ActionC(value));
}
};
};
/**
* this function connects the application component to be possible to interact with the store
* @param {*} mapStateToProps allows the retrieval of information from the state of the application
* @param {*} mapDispatchToProps allows the state to change via the actions defined inside
*/
export default connect(mapStateToProps,mapDispatchToProps)(App);
``
يوضح المثال أعلاه كيفية إعداد مكون التطبيق الأساسي وكيفية تفاعله مع بنية redux.
أيضا كيفية إرسال عمل محدد من المكون الذي سيتم تمريرها إلى المخزن وإجراء التغييرات على مخفض التطبيق.
## إعلان إجراءات التطبيق
الملف التالي:
* /common/actions/appActions.js
* هذا الملف هو المكان الذي ستتفاعل فيه كل من الإجراءات المحددة مع حالة التطبيق والمخفض.
* وكذلك يجب أن يتم إجراء أي استدعاء واجهة مستخدم خارجي يحتاجه التطبيق هنا ثم تمريره إلى المخفض عبر استدعاء الإجراء.
\`\` \`جافا سكريبت استيراد { APP _ACTION_ A ، APP _ACTION_ B ، APP _ACTION_ C } من "../constants/Action أنواع" ؛ / \*\*
* es6 ثابت ل comunicate مع المخفض لأداء عمل معين
* param {Object} يقوم بتقييم كائن أو أي نوع آخر ليتم تعيينه في المخفض **/ const const التصدير doActionA = value => ({ النوع: APP _ACTION_ A ، القيمة })؛ /**
* es6 ثابت ل comunicate مع المخفض لأداء عمل معين
* param {الكائن} كائن أو أي نوع آخر ليتم تعيينه في المخفض **/ const const التصدير doActionB = value => ({ النوع: APP _ACTION_ B ، القيمة })؛ /**
* es6 ثابت ل comunicate مع المخفض لأداء عمل معين
* param {الكائن} كائن أو أي نوع آخر ليتم تعيينه في المخفض **/ const export doActionC = value => ({ النوع: APP _ACTION_ C ، القيمة })؛ /**
* es6 الثابت الذي سيكون على علم بالمكون بحيث يكون التفاعل ممكنًا بين المكون والدولة
* param {Object} يقوم بتقييم كائن أو أي نوع آخر ليتم تعيينه في المخفض **/ const const للتصدير ActionA = value => dispatch => { الإرسال (doActionB (القيمة))؛ }؛ /**
* es6 الثابت الذي سيكون على علم بالمكون بحيث يكون التفاعل ممكنًا بين المكون والدولة \*\* / const const للتصدير ActionB = () => dispatch => { الإرسال (doActionB (صحيح))؛ }؛ `In the example code provided above, the item` سيصبح `In the example code provided above, the item` ActionB\`\`\` متاحًا لمكون App.jsx وعندما يتم تشغيله بواسطة المكون عبر دعامة ، فإنه سيؤدي إلى الإجراء المناسب داخل هذا الملف ثم إلى المخفض وتغييره. وفقا لذلك.
## تنفيذ أنواع العمل
الملف التالي:
* /common/constants/Actiontypes.js
* سيحتوي هذا الملف على إعلان كل نوع من أنواع الإجراءات المتاحة للاستخدام من قبل التطبيق.
* يجب أن تكون التصريحات التي يتم القيام بها هنا متوفرة على ملف الإجراءات حتى يتم التعامل معها في التطبيق.
`export const APP_ACTION_A='MAKE_A';
export const APP_ACTION_B='MAKE_B';
export const APP_ACTION_C='MAKE_C';
`
في المثال المذكور أعلاه ، يتم الإعلان عن ثلاثة أنواع من الإجراءات وتصديرها لكي تصبح متاحة للاستهلاك.
## تنفيذ المخفض
الملف التالي:
* /common/reducers/appReducer.js
* إن المخفض في الجوهر ليس أكثر من وظيفة نقية لجافا سكريبت سوف تتحقق مما إذا كان أي من الشروط يفي بالإجراء الذي تم تشغيله وإجراء التغييرات على الحالة ، ولا يتم تحويره أبدًا.
` import {
APP_ACTION_A,
APP_ACTION_B,
APP_ACTION_C
} from '../constants/Actiontypes';
/**
* es6 example of a declaration of the reducer
* @param {Object} state contains all the application's state properties needed
* @param {action} action the action that will trigger the state's changes
**/
const ExampleAppReducer= (state = {
exampleBool:false, // boolean value
exampleString:'', // string value
exampleArray: [], // array value
onError:{
A:'',
B:'',
C:''
} // object with properties inside
}, action) => {
//switch statement that will test every case and make the necessary changes, never mutating the state as it's being preserved always
switch(action.type){
case APP_ACTION_A:{
return {
...state, // es6 epread operator to make a copy of the existing state object
exampleBool:action.value // the state property changes accordingly to the value of the action triggered
};
}
case APP_ACTION_B:{
return {
...state,
exampleString:action.value
};
},
case APP_ACTION_C:{
return {
...state,
exampleArray:action.value
};
}
default:{
return state; // if any of the actions triggered is not defined here it will return the default state
}
}
};
export default ExampleAppReducer;
`
يوضح الكود أعلاه كيف يتم تعريف المخفض الأساسي ويحدث تغييرات على الحالة ، عن طريق اختبار شرط معين.
## تنفيذ المتجر
الملف:
* /common/store/store.js
* سيحتوي هذا الملف على تعريف شجرة الحالة الخاصة بالتطبيق ، من أجل تغيير الحالة داخل ، يجب إرسال أكتين إلى هنا.
* إنه ليس أكثر من كائن به طرق معلن عنها ، أهمها إنشاء المتجر
\`\` \`جافا سكريبت import {createStore} من "redux" ؛ استيراد مثال من "../reducers/ExampleAppReducer" ؛
تصدير الافتراضية createStore ( مثال )؛ \`\` \` يوضح التعليمة البرمجية أعلاه كيفية تعريف مخزن تطبيقات بسيط.
هذا هو الإعداد الأساسي للمخفض ، يمكن توسيعه بشكل أكبر ويحتوي على مخازن متعددة على سبيل المثال وأيضا إضافة بعض الوسيطة إليها.
## قراءة متعمقة
بما أن هذا الدليل ليس أكثر من مجرد مقدمة لكيفية تفاعل وإعادة العمل معًا وكيفية تطبيق البنية. ينصح بشدة لقارئ هذا الدليل بقراءة الروابط التالية ليتم قراءتها واستنساخ repos وتجربتها.
[Redux Docs](http://redux.js.org/)
[Redux Api](http://redux.js.org/docs/api/)
[أمثلة Redux](https://github.com/reactjs/redux/tree/master/examples)