Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs React Redux Saga样板流程_Reactjs_Redux_Redux Saga - Fatal编程技术网

Reactjs React Redux Saga样板流程

Reactjs React Redux Saga样板流程,reactjs,redux,redux-saga,Reactjs,Redux,Redux Saga,我已经使用其中一个启动了我的react.js项目。我用过一个。我正在努力学习反应的实际流程 Redux样板。在研究了它们的结构之后,我能够调用API并获得组件上的数据。以下是我根据结构学到的流程:- a。在componentDidMount上,我调用了Mudules方法来创建一个动作 // On view componentDidMount() { this.props.getCampaignTopics(1); } //On Modules export const ge

我已经使用其中一个启动了我的react.js项目。我用过一个。我正在努力学习反应的实际流程 Redux样板。在研究了它们的结构之后,我能够调用API并获得组件上的数据。以下是我根据结构学到的流程:-

a。在componentDidMount上,我调用了Mudules方法来创建一个动作

 // On view
 componentDidMount() {
     this.props.getCampaignTopics(1);
 }

 //On Modules
 export const getCampaignTopics = createAction(GET_CAMPAIGN_TOPICS, (id : string) => ({id}));
b。在saga上,当动作被触发时,我调用API端点来获取数据

// On Saga
export function* getCampaignTopics(actions) {
   let id=0;
   if(actions.payload.id)
   {
       id= actions.payload.id;
   }
   const responsetype = yield call(() => fetch(__CONFIG__.api_url+'topic/' + id,{method:'GET',data:{}}).then(response => response.json()))

  yield put(addcampaignActions.setCampaignTopics(responsetype.data));
  }


function* watchGetHome() {
   yield takeLatest(addcampaignConstants.GET_CAMPAIGN_TOPICS, getCampaignTopics);
}
c。获取数据后,我调用另一个模块方法来设置数据

export const setCampaignTopics = createAction(SET_CAMPAIGN_TOPICS, (topics : any) => ({topics}));

export const reducers = {
   [GET_CAMPAIGN_TOPICS]: (state, { payload }) =>
    state.merge({
      ...payload,
    }),
      [SET_CAMPAIGN_TOPICS]: (state, { payload }) =>
        state.merge({
          ...payload,
        }),
    }
d。鉴于此,我使用选择器来分隔索引

// Selector
const addcampaignDataSelector = state => state.addcampaign;

const topicSelector = createSelector(
  addcampaignDataSelector,
  payload => payload.get('topics')
);

export const addcampaignSelector = state => ({
  topics: topicSelector(state)
});
e。在组件中,我得到了道具的价值

// render on Component
const { addcampaign } = this.props;     
topics = addcampaign.topics.toJS().children;
这就是我从他们的教程中得到的流程,我正在得到数据。但我想确定我是否在正确的轨道上?请告诉我这是否是正确的过程

接下来,我想从组件调用一个方法,并希望接收组件上的响应,以便获得局部变量上的数据。谁能给我一些教程或例子,这样我就可以轻松地学习了

如果您正在寻找一个可用于生产的样板文件, 是最受欢迎的一种


你似乎在正确的轨道上。react样板中的这个图表可能有助于更好地理解流程

在我看来,流似乎很好-只有一个建议我会避免在组件中使用
addcampaign.topics.toJS().children
-在我看来,如果组件接收更多的基本类型而不是immutable.js对象(我假设您使用的是该库),则会更清楚一些。所以也许你也可以把它作为选择器公开。另外,在
getCampaignTopics
中,您可以将
0
作为默认值或
id
参数,这样您就不必在saga中对其进行测试。因此,根据我的流程,我没有使用任何回调来获取返回值,我只需要在变量上获取所有信息,并且我必须检查该变量是否已更新。有什么办法可以打回电话吗?因为假设我有一个方法getCampaignTopics(),使用该方法,我需要在同一个组件上使用父主题和子主题,那么我该怎么做呢?谢谢@Anu的回答。你能告诉我调用saga方法并得到回调的过程吗。我希望返回数据在回调方法上,而不是在变量上。