首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hooks和Redux Saga

Hooks和Redux Saga
EN

Stack Overflow用户
提问于 2019-05-07 08:08:59
回答 1查看 18.3K关注 0票数 12

我正在学习redux钩子,并想知道如何与redux传奇一起使用它。

目前,用saga编写的代码如下。

centers.js

代码语言:javascript
复制
componentDidMount() {
    this.props.getCenters();
  }

...

<tbody>
                            {
                              this.props.centers ?
                                <React.Fragment>
                                  {
                                    centers.map((center, index) =>
                                      <tr key={index}>
                                        <td>{center.name}</td>
                                        <td>{center.zip}</td>
                                      </tr>
                                    )
                                  }
                                </React.Fragment>
                              :
                                <tr>
                                  <td> No data available</td>
                                </tr>

                            }
                          </tbody>

操作文件定义如下。

代码语言:javascript
复制
export const getCenters = () => ({
  type: types.CENTERS_REQUEST,
});

saga文件定义如下。

代码语言:javascript
复制
import { DEFAULT_ERROR_MSG } from '../../constants';
import { instance as centerProvider } from '../services/centerProvider';

function* fetchCenters() {
  try {
    const response = yield call(centerProvider.getCenters);
    const centers = response.data.data.centers;

    // dispatch a success action to the store
    yield put({ type: types.CENTERS_SUCCESS, centers});

  } catch (error) {
    // dispatch a failure action to the store with the error
    yield put(DEFAULT_ERROR_MSG);
  }
}

export function* watchCenterRequest() {
  yield takeLatest(types.CENTERS_REQUEST, fetchCenters);
}

export default function* centerSaga() {
  yield all([
    watchCenterRequest()
  ]);
}

所以问题是,

  • 如果我们用钩子,我们还需要剩余的吗?
  • 我们如何使用钩子重写上述代码?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-07 08:31:29

  1. “如果我们用钩子,我们还需要重装吗?”

如果需要,可以使用useReducer钩子而不是redux。但是,如果在DOM树的不同分支中深嵌套的不同组件之间有一个共享状态,那么用useReducer实现可能会有点复杂。因此,使用redux和saga并不与钩子相矛盾。如果更喜欢函数组件而不是类组件,那么就需要挂钩。

  1. “我们如何使用钩子重写上述代码?”

您可以将类组件Centers重编为如下所示的函数组件:

代码语言:javascript
复制
function Centers(props) {
    useEffect(() => {
        props.getCenters();
    }, []);

    return (
        //render what you need here
    );
}
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56018174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档