如何在 redux 的动作上调用动作?
How to call an action on the actions of redux?
我是这样调用动作的:
<Button style={{ margin: 8, borderRadius: 8 }}
icon="check-circle" mode="outlined"
onPress={
() => this.props.authenticate(email, password)
}
>
和这样的身份验证功能:
import {REQUEST, RECEIVED, FAILED, SIGNOUT, apiUrl} from '../types';
import axios from 'axios'
export function authenticate(email, password) {
return (dispatch, getState) => {
console.log('authomy');
dispatch(startAuthentication())
return axios({
url: apiUrl('/api/v1/auth/sign_in'),
method: 'POST',
data: { email, password }
}).then(response => {
const uid = response.headers['uid']
const client = response.headers['client']
const accessToken = response.headers['access-token']
const expiry = response.headers['expiry']
dispatch(successAuthentication(uid, client, accessToken, expiry))
}).catch(error => {
dispatch(doSignout())
})
}
}
export function signout() {
console.log('in signout')
return (dispatch, getState) => {
const { auth } = getState()
return axios({
url: apiUrl('/api/somewhere/sign_out'),
method: 'DELETE',
headers: {
'access-token': auth.accessToken,
'client': auth.client,
'uid': auth.uid
}
}).then(response => {
console.log('sent')
dispatch(doSignout())
return { type: SIGNOUT }
}).catch(error => {
console.log(error)
dispatch(doSignout())
return { type: SIGNOUT }
})
}
}
export function expireAuthentication() {
return doSignout()
}
export function startAuthentication() {
console.log('dispatch startAuthentication')
return { type: REQUEST }
}
export function successAuthentication(uid, client, accessToken, expiry) {
return { type: RECEIVED, uid, client, accessToken, expiry }
}
function failAuthentication() {
return { type: FAILED }
}
export function doSignout() {
return { type: SIGNOUT }
}
我收到错误:
操作不能有未定义的 "type" 属性。你有没有拼错常数?
我找不到错误的确切位置
所以我添加了您需要的 AuthAction 文件,错误所在???
The error
const REQUEST = 'auth/REQUEST'
const RECEIVED = 'auth/RECEIVED'
const FAILED = 'auth/FAILED'
const SIGNOUT = 'auth/SIGNOUT'
export const HOST_URL = 'http://192.168.10.196:3000'
export function hostUrl(route) { return HOST_URL + route }
export const API_URL = 'http://192.168.10.196:3000'
export function apiUrl(route) { return API_URL + route }
export const ASSETS_URL = 'http://192.168.10.196:3000'
export function assetsUrl(route) {
return ASSETS_URL + route
}
这里的问题是您不是导出您的types.js文件中的操作。
试试这个:
export const REQUEST = 'auth/REQUEST'
export const RECEIVED = 'auth/RECEIVED'
export const FAILED = 'auth/FAILED'
export const SIGNOUT = 'auth/SIGNOUT'
export const HOST_URL = 'http://192.168.10.196:3000'
export function hostUrl(route) { return HOST_URL + route }
export const API_URL = 'http://192.168.10.196:3000'
export function apiUrl(route) { return API_URL + route }
export const ASSETS_URL = 'http://192.168.10.196:3000'
export function assetsUrl(route) {
return ASSETS_URL + route
}
我是这样调用动作的:
<Button style={{ margin: 8, borderRadius: 8 }}
icon="check-circle" mode="outlined"
onPress={
() => this.props.authenticate(email, password)
}
>
和这样的身份验证功能:
import {REQUEST, RECEIVED, FAILED, SIGNOUT, apiUrl} from '../types';
import axios from 'axios'
export function authenticate(email, password) {
return (dispatch, getState) => {
console.log('authomy');
dispatch(startAuthentication())
return axios({
url: apiUrl('/api/v1/auth/sign_in'),
method: 'POST',
data: { email, password }
}).then(response => {
const uid = response.headers['uid']
const client = response.headers['client']
const accessToken = response.headers['access-token']
const expiry = response.headers['expiry']
dispatch(successAuthentication(uid, client, accessToken, expiry))
}).catch(error => {
dispatch(doSignout())
})
}
}
export function signout() {
console.log('in signout')
return (dispatch, getState) => {
const { auth } = getState()
return axios({
url: apiUrl('/api/somewhere/sign_out'),
method: 'DELETE',
headers: {
'access-token': auth.accessToken,
'client': auth.client,
'uid': auth.uid
}
}).then(response => {
console.log('sent')
dispatch(doSignout())
return { type: SIGNOUT }
}).catch(error => {
console.log(error)
dispatch(doSignout())
return { type: SIGNOUT }
})
}
}
export function expireAuthentication() {
return doSignout()
}
export function startAuthentication() {
console.log('dispatch startAuthentication')
return { type: REQUEST }
}
export function successAuthentication(uid, client, accessToken, expiry) {
return { type: RECEIVED, uid, client, accessToken, expiry }
}
function failAuthentication() {
return { type: FAILED }
}
export function doSignout() {
return { type: SIGNOUT }
}
我收到错误: 操作不能有未定义的 "type" 属性。你有没有拼错常数?
我找不到错误的确切位置
所以我添加了您需要的 AuthAction 文件,错误所在???
The error
const REQUEST = 'auth/REQUEST'
const RECEIVED = 'auth/RECEIVED'
const FAILED = 'auth/FAILED'
const SIGNOUT = 'auth/SIGNOUT'
export const HOST_URL = 'http://192.168.10.196:3000'
export function hostUrl(route) { return HOST_URL + route }
export const API_URL = 'http://192.168.10.196:3000'
export function apiUrl(route) { return API_URL + route }
export const ASSETS_URL = 'http://192.168.10.196:3000'
export function assetsUrl(route) {
return ASSETS_URL + route
}
这里的问题是您不是导出您的types.js文件中的操作。
试试这个:
export const REQUEST = 'auth/REQUEST'
export const RECEIVED = 'auth/RECEIVED'
export const FAILED = 'auth/FAILED'
export const SIGNOUT = 'auth/SIGNOUT'
export const HOST_URL = 'http://192.168.10.196:3000'
export function hostUrl(route) { return HOST_URL + route }
export const API_URL = 'http://192.168.10.196:3000'
export function apiUrl(route) { return API_URL + route }
export const ASSETS_URL = 'http://192.168.10.196:3000'
export function assetsUrl(route) {
return ASSETS_URL + route
}