ReduxとSagasを使用して認証アプリケーションを反応させる
21598 ワード
概要
私がこのポストで行くつもりであるものはそうです:
Reduxが反応に関連しないという事実を確立しましょう.Reduxも角で使用することができます.それは完全に反応するReduxゲルを言った.それで、私はreduxとは何か質問に答えましょうか?
単純なreduxを維持するには“アプリケーションの状態を管理するためのオープンソースのJavaScriptライブラリ”です.それはあなたが一貫して動作するアプリケーションを書くことができます.
スパイスには、このAPIを使用しましょう.私は私のrepoにあるバックエンドAPIサービスを使用することができます.Authentication with Node READMEファイルで説明した手順に従ってサービスを実行するか、独自のJSON WebトークンベースAPIを使用できます.
ショーを始めよう!
ショーを開始するには、我々の反応アプリをステージにしている.そのためにはコマンドに従います.
確認してください
create-react-app
インストールa)
$ npm install -g create-react-app
クリエイトアプリb)
$ npx create-react-app my-app
ディレクトリに移動マイアプリc)
$ cd my-app
実行反応アプリd)
$ npm start
すべての必須のpacakgesをインストールしましょう・・・
$ npm i redux react-redux redux-saga react-router redux-form --save
今すぐあなたの反応アプリをステージしている.では、ダイビングをしましょう.イン
code
ディレクトリ.構造のランウンディングは以下の通りです.src/
login/
actions.js
constants.js
sagas.js
selector.js
reducer.js
index.js
components/
login.js
register/
actions.js
constants.js
sagas.js
selector.js
reducer.js
index.js
components/
register.js
user/
reducer.js
actions.js
constants.js
share/
Messages.js
helpers/
api-errors.js
check-auth.js
Main.js
index-reducer.js
index-sagas.js
作成したフォルダとファイルを調べましょう.login/
, register/
& user/
login/
& register/
私たちが使用するルートです.作成したファイルに次のようになります.
a)
actions.js
あなたのアプリケーションからデータをあなたのストアに送る情報のペイロードです.これらはプレーンなJavaScriptオブジェクトですb)
reducer.js
ストアに送信された応答でアプリケーションの状態がどのように変化するかを指定します.c)
constants.js
アクションと減速のための定数を持つ場所d)
sagas.js
これは、我々が不純物操作を管理するところです、すなわち、データフェッチのような非同期のもの・・・
index-reducer.js
& index-sagas.js
ハブは、我々はすべての減速とサガコードに入りましょう
1 )ディレクトリ内
src/index
index.js
はimport React from 'react';
import ReactDOM from 'react-dom';
import { applyMiddleware, createStore, compose } from 'redux';
import { Provider } from 'react-redux';
import createSagaMiddleware from 'redux-saga';
import { routerMiddleware } from 'react-router-redux';
import { history } from './history';
import { Router } from 'react-router-dom';
// Import all of our components
import App from './App';
import './index.css';
// Import the index reducer and sagas
import IndexReducer from './index-reducer';
import IndexSagas from './index-sagas';
import registerServiceWorker from './registerServiceWorker';
// Setup the middleware to watch between the Reducers and the Actions
const sagaMiddleware = createSagaMiddleware();
const routersMiddleware = routerMiddleware(history);
/*eslint-disable */
const composeSetup =
process.env.NODE_ENV !== 'production' && typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
: compose;
/*eslint-enable */
const store = createStore(
IndexReducer,
composeSetup(applyMiddleware(sagaMiddleware, routersMiddleware)) // allows redux devtools to watch sagas
);
// Begin our Index Saga
sagaMiddleware.run(IndexSagas);
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<App />
</Router>
</Provider>
document.getElementById('root')
);
registerServiceWorker();
import React from 'react';
import ReactDOM from 'react-dom';
import { applyMiddleware, createStore, compose } from 'redux';
import { Provider } from 'react-redux';
import createSagaMiddleware from 'redux-saga';
import { routerMiddleware } from 'react-router-redux';
import { history } from './history';
import { Router } from 'react-router-dom';
// Import all of our components
import App from './App';
import './index.css';
// Import the index reducer and sagas
import IndexReducer from './index-reducer';
import IndexSagas from './index-sagas';
import the required pakages
ミドルウェア
const sagaMiddleware = createSagaMiddleware()
const routersMiddleware = routerMiddleware(history);
ストアの作成
/*eslint-disable */
const composeSetup = process.env.NODE_ENV !== 'production' && typeof window === 'object' &&
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ ?
window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ : compose
/*eslint-enable */
インデックス
( AlphiMiddleware ( Sagamiddleware , routersmiddleware )
)
Here ` composeSetup(applyMiddleware(sagaMiddleware, routersMiddleware)),` allows redux to watch sagas and router
+ To Start the Saga middleware
```javascript
sagaMiddleware.run(IndexSagas)
は、applyMiddleware
フェーズ. ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<App />
</Router>
</Provider>,
document.getElementById('root')
);
registerServiceWorker();
だからここで我々は店を提供し、それをストアを取得する反応アプリを提供して<Provider store={store}>
2 )今に入りましょうindex-reducer.js
```javascript
import { combineReducers } from 'redux'
import { reducer as form } from 'redux-form'
const IndexReducer = combineReducers({
form
})
export default IndexReducer
```
The combineReducers
ヘルパー関数は、値が異なる機能を持つオブジェクトを、createStore
3 )index-saga.js
import { all } from 'redux-saga/effects';
export default function* IndexSaga() {
yield all([ ]);
}
4)今では還元剤のインデックス、佐賀とメインインデックスを行っているApp.js
:import React, { Component } from 'react';
import './App.css';
import Main from './Main';
class App extends Component {
render() {
return (
<div className="App">
<Main />
</div>
);
}
}
export default App;
ここアプリでは<Main />
我々のルートが存在するところ5 )我々はアプリケーションのルート、すなわち主要なコンポーネントに対処するためにコンポーネントを切り離しました
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Login from '../src/login';
import Register from '../src/register';
export default class Main extends React.Component {
render() {
return (
<main>
<Switch>
<Route path="/login" component={Login} />
<Route path="/register" component={Register} />
</Switch>
</main>
);
}
}
掘りましょう.Switch
<Switch>
それは排他的にルートをレンダリングするユニークです.対照的に、あらゆる<Route>
その場所にマッチします.Reference
この問題について(ReduxとSagasを使用して認証アプリケーションを反応させる), 我々は、より多くの情報をここで見つけました https://dev.to/srivasthava12/react-authentication-app-using-redux-and-sagas-anpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol