अभी Redux शहर में नवीनतम बच्चे के बारे में बहुत चर्चा है, redux-saga / redux-saga । यह सुनने / प्रेषण क्रियाओं के लिए जनरेटर कार्यों का उपयोग करता है।
इससे पहले कि मैं अपना सिर इसके चारों ओर लपेटूं, मैं redux-saga
नीचे दिए गए दृष्टिकोण के बजाय उपयोग करने के पेशेवरों / विपक्षों को जानना चाहूंगा जहां मैं redux-thunk
async या प्रतीक्षा के साथ उपयोग कर रहा हूं ।
एक घटक इस तरह दिख सकता है, सामान्य रूप से कार्रवाई भेज सकता है।
import { login } from 'redux/auth';
class LoginForm extends Component {
onClick(e) {
e.preventDefault();
const { user, pass } = this.refs;
this.props.dispatch(login(user.value, pass.value));
}
render() {
return (<div>
<input type="text" ref="user" />
<input type="password" ref="pass" />
<button onClick={::this.onClick}>Sign In</button>
</div>);
}
}
export default connect((state) => ({}))(LoginForm);
तब मेरी हरकतें कुछ इस तरह दिखती हैं:
// auth.js
import request from 'axios';
import { loadUserData } from './user';
// define constants
// define initial state
// export default reducer
export const login = (user, pass) => async (dispatch) => {
try {
dispatch({ type: LOGIN_REQUEST });
let { data } = await request.post('/login', { user, pass });
await dispatch(loadUserData(data.uid));
dispatch({ type: LOGIN_SUCCESS, data });
} catch(error) {
dispatch({ type: LOGIN_ERROR, error });
}
}
// more actions...
// user.js
import request from 'axios';
// define constants
// define initial state
// export default reducer
export const loadUserData = (uid) => async (dispatch) => {
try {
dispatch({ type: USERDATA_REQUEST });
let { data } = await request.get(`/users/${uid}`);
dispatch({ type: USERDATA_SUCCESS, data });
} catch(error) {
dispatch({ type: USERDATA_ERROR, error });
}
}
// more actions...
::
आपके this.onClick
करने से पहले क्या है ?
this
), उर्फ के लिए फ़ंक्शन को बाँधने के लिए एक छोटा हाथ है this.onClick = this.onClick.bind(this)
। लंबे समय तक फॉर्म को आमतौर पर कंस्ट्रक्टर में करने की सिफारिश की जाती है, क्योंकि हर रेंडर पर शॉर्ट हैंड रि-बाइंड होते हैं।
bind()
को पास this
करने के लिए बहुत प्रयोग कर रहे () => method()
हैं , लेकिन मैंने अब उपयोग करना शुरू कर दिया है ।