有效载荷数据类型是什么?

a125

我正在运行graphql突变:

interface SignInReponse {
  loginEmail : {
    accessToken: number;
  }
}

 const [login] = useMutation<SignInReponse>(LOGIN);

let submitForm = (email: string, password: string) => {
    setIsSubmitted(true);
    login({
      variables: {
        email: email,
        password: password,
      },
    })
      .then(({ data }: ExecutionResult<SignInReponse>) => {
        if (data !== null && data !== undefined){
        dispatch({ type: "login", payload: data.loginEmail.accessToken })  
        setTimeout(_ => {
          setShouldRedirect(true);
        }, 2000)
        setIsLoggedIn(true);
  }})

我的登录还原器:

const initialState = {
    token: null
};

export const loginReducer = (state = initialState, { type, payload } :any) => {
  switch (type) {
    case "login":
      return {...state, token: payload};
    default:
      return state;
  }
};

我想更改any数据类型{ type, payload } :any并更具体。

但是,我不知道查找/使用正确数据类型的正确方法是什么。我已经尝试过使用SignInResponse了,但是由于类型/有效载荷未提及,所以它不起作用。

编辑:

我也尝试过这个:

export const loginReducer = (state = initialState, { type, payload }: {type: "login", payload: string })

但它似乎不起作用。

TypeScript error in /helpers/privateRouting.tsx(7,32):
Property 'token' does not exist on type 'never'.  TS2339

我修改了这样的内容,但仍然出现错误:

动作/登录名:

const LOGIN = 'LOGIN'

export interface LoginAction {
    type: typeof LOGIN
    payload: string;
  }

allActions.ts:

import { LoginAction } from './login';

export type AnyAction = LoginAction

Login Reducer:

const initialState = {
    token: null
};
export const loginReducer = (state = initialState, action: AnyAction) => {
  switch (action.type) {
    case 'LOGIN':
      return {...state, token: action.payload};
    default:
      return state;
  }
};

减速器index.ts:

export const rootReducer = combineReducers({
    login: loginReducer,
});

专用路由:

export const PrivateRoute = ({ component, ...rest }: any) => {
  const routeComponent = (props: any) => {
    if (store.getState().login.token) {
      return React.createElement(component, props);
    } else {
      return <Redirect to={{ pathname: '/404' }} />;
    }
  };
  return <Route {...rest} render={routeComponent} />;
};

错误:

Property 'token' does not exist on type 'never'.  TS2339

     5 | export const PrivateRoute = ({ component, ...rest }: any) => {
     6 |   const routeComponent = (props: any) => {
  >  7 |     if (store.getState().login.token) {

商店index.ts:

const persistConfig = {
    key: 'root',
    storage
}

const persistedReducer = persistReducer(persistConfig, rootReducer)

let store = createStore(persistedReducer);
let persistor = persistStore(store);
export { store, persistor };

我正在使用如下的privateRoutes:

export default function App() {
  return (
    <Provider store={store}>
      <PersistGate persistor={persistor}>
        <div>
          <BrowserRouter>
            <Switch>
              <Route path="/login" component={LoginPage}></Route>
              <Route path="/404" component={Error404Page}></Route>
              <PrivateRoute
                path="/add"
                component={AddUserPage}
              />
              <Redirect from="*" to="/404" />
            </Switch>
          </BrowserRouter>
        </div>
      </PersistGate>
    </Provider>
  );
}
罗伯特·摩尔

将Redux与TypeScript一起使用时,这是一个常见的主题。您应该actions.ts在重要位置使用从某个大主文件导出的联合类型例如:

// somewhere/ComponentOne.tsx
export default ComponentOne = () => stuff;

export interface OneAction {
  type: 'ONE_ACTION';
  payload: string;
}
// all-actions.ts
import { OneAction } from './somewhere/ComponentOne';
import { AnotherAction } from './somewhere/AnotherComponent';

export default type AnyAction = OneAction | AnotherAction;

然后在您的减速器中:

import { AnyAction } from '../../all-actions.ts';

function loginReducer(state = initialState, action: AnyAction) {
  // stuff
}

现在,您的异径管完全知道它所得到的,并且类型安全性是完美的。本文比我能更好地解释它,非常值得一读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

iOS中的有效载荷数据是什么?

Mule 4:根据 Mule 4 中有效载荷的数据类型检查和应用条件的最安全方法是什么?

什么是有效载荷?

Android推送通知(GCM)的有效载荷应该是什么

休息 api 有效载荷字段的正确日期格式是什么?

AutoReceiveMessage信封(SelectChildName(演员名称(某些有效载荷)))的目的是什么?

将API资源设置为301的动词和有效载荷是什么?

React和Redux:从动作类型的有效载荷中提取数据

在Redux操作中将数据放入“有效载荷”键中有什么好处?

请求模块中的数据有效载荷?

获取ICMP数据包有效载荷

获取ICMP数据包有效载荷

作用中的有效载荷

有效载荷 JWT 结构

有效载荷损坏(校验和失败)最合适的HTTP错误代码是什么?

从Node.js发送给Dialogflow的默认响应有效载荷是什么

WebGL中顶点数组的有效数据类型是什么?

NGRX 角度有效载荷或无有效载荷

GCP 记录来自有效载荷的有效载荷 (Stackdrive)

spring Kafka 有效载荷类型的二义性方法

打字稿:推断有效载荷类型并将其传递给回调

Scrapy-请求有效载荷格式和类型

如何使用Gson解析多种类型的有效载荷

捕获数据包中的数据和有效载荷

如何将数据发布为表单数据而不是请求有效载荷?

FCM数据消息不发送最新数据有效载荷

axios将数据发布为表单数据,而不是有效载荷中的JSON

WinDivert - 修改数据包数据/有效载荷内容

iBeacon可以有数据有效载荷吗