React Native Redux传奇收益不起作用

时间:2018-07-16 09:14:19

标签: react-native redux redux-saga

我在React Native应用中使用redux saga。除了一件事情,这一切都起作用。对于我第一次分发时的动作之一,它在以下代码中的“ const newUserLogAction = yield take('CREATE_USER_LOG')”处停止。因此不会打印控制台日志“ saga callCreateUserLog take”,什么也不会发生。但是,如果我再次分派相同的动作,它将起作用。我还有其他动作,它们在第一次都可以正常工作。

saga文件:

function * createUserLog () {
  yield takeEvery('CREATE_USER_LOG', callCreateUserLog)
}

export function * callCreateUserLog () {
  try {
    console.log('saga callCreateUserLog start')
    const newUserLogAction = yield take('CREATE_USER_LOG')
    console.log('saga callCreateUserLog take')
    console.log('newUserLogAction' + FJSON.plain(newUserLogAction))
    const data = newUserLogAction.data
    const newUserLog = yield call(api.createUserLog, data)
    yield put({type: 'CREATE_USER_LOG_SUCCEEDED', newUserLog: newUserLog})
  } catch (error) {
    yield put({type: 'CREATE_USER_LOG_FAILED', error})
  }
}

动作文件:

export const createUserLog = (data) => {
  console.log('action create user log data = ' + FJSON.plain(data))
  return ({
    type: 'CREATE_USER_LOG',
    data}
  )
}

即使在第一次发送时,此处的数据也会正确打印,因此有效载荷是正确的。

反应本机函数进行调度:

clickContinue = () => {
    var event = {
      'userId': this.props.user.id,
      'eventDetails': {
        'event': 'Agreed to the ISA Declaration'
      }
    }
    this.props.dispatch(createUserLog(event))
  }

1 个答案:

答案 0 :(得分:1)

您不需要使用take效果。动作对象将由takeEvery传递。

export function * callCreateUserLog (newUserLogAction) {
  try {
    console.log('saga callCreateUserLog start')
    console.log('newUserLogAction' + FJSON.plain(newUserLogAction))
    const data = newUserLogAction.data
    const newUserLog = yield call(api.createUserLog, data)
    yield put({type: 'CREATE_USER_LOG_SUCCEEDED', newUserLog: newUserLog})
  } catch (error) {
    yield put({type: 'CREATE_USER_LOG_FAILED', error})
  }
}