redux-saga / redux-saga의 redux 타운에서 최신 아이에 대해 많은 이야기가 있습니다. 작업 듣기 / 배포를 위해 생성기 기능을 사용합니다.
머리를 감싸기 전에 async / await과 함께 redux-saga
사용 redux-thunk
하는 아래의 접근 방식 대신 사용의 장단점을 알고 싶습니다 .
구성 요소는 다음과 같을 수 있으며 평소와 같이 작업을 전달합니다.
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()
지금 사용하기 시작했습니다 .