簡體   English   中英

react TypeError: Cannot read property 'fulfilled' of undefined on Redux tool kit

[英]react TypeError: Cannot read property 'fulfilled' of undefined on Redux tool kit

我剛剛編譯了我的代碼,它打印出“TypeError:無法讀取未定義的屬性‘已完成’”

似乎我必須為已完成添加初始值,但我不知道如何開始。

我應該將 my.js 轉換為 ts 並為下面的代碼添加接口嗎?

請幫我解決這個問題。

這是我的 Redux 工具包的 slice.js 文件

import { createSlice, creatAsyncThunk , createAsyncThunk} from '@reduxjs/toolkit';
export const userSlice = createSlice({
    name: 'user',
    initialState: {
        username: '',
        email: '',
        isFetching: false,
        isSuccess: false,
        isError: false,
        errorMessage: '',
    },
    reducers: {
        clearState: (state) => {
            state.isError = false;
            state.isSuccess = false;
            state.isFetching = false;
            return state;
          },
    },
    exrtraReducers: {
        [signupUser.fulfilled]: (state, { payload }) => {
            state.isFetching = false;
            state.isSuccess = true;
            state.email = payload.user.email;
            state.username = payload.user.name;
        },
        [signupUser.pending]: (state) => {
            state.isFetching= true;
        },
        [signupUser.rejected]: (state, { payload }) => {
            state.isFetching = false;
            state.isError = true;
            state.errorMessage = payload.method;
        },
        [loginUser.fulfilled]: (state, { payload }) => {
            state.email = payload.email;
            state.username = payload.name;
            state.isFetching = false;
            state.isSuccess = true;
            return state;
        },
        [loginUser.rejected]: (state, { payload }) => {
            console.log('payload', payload);
            state.isFetching = false;
            state.isError = true;
            state.errorMessage = payload.message;
        },
        [loginUser.pending]: (state) => {
            state.isFetching = true;
        },
    },
});
export const userSelector = (state) => state.user;
export const signupUser = createAsyncThunk(
    'users/signupUser',
    async ({ name, email, password }, thunkAPI ) => {
        try {
            const response = await fetch (
                'https:/...',
                {
                    method: 'POST',
                    headers: {
                        Accept: 'application/json',
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({
                        name,
                        email,
                        password,
                    }),
                }
            );
            let data = await response.json();
            console.log('data : ', data);
            if (response.status === 200) {
                localStorage.setItem('token', data.token);
                return { ...data, username: name, email: email };
            } else {
                return thunkAPI.rejectWithValue(data);
            }
        } catch (e) {
            console.log('Error', e.response.data);
            return thunkAPI.rejectWithValue(e.response.data);
        }
    }
);
export const loginUser = createAsyncThunk(
    'users/login',
    async ({ email, password }, thunkAPI ) => {
        try {
            const response = await fetch(
                'https://...',
                {
                    method: 'POST',
                    headers: {
                        Accept: 'application/json',
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({
                        email,
                        password,
                    }),
                }
            );
            let data = await response.json();
            console.log('response', data);
            if (response.status === 200) {
                localStorage.setItem('token', data.token);
                return data;
            } else {
                return thunkAPI.rejectWithValue(data);
            }
        }  catch (e) {
            console.log('Error', e.response.data);
            thunkAPI.rejectWithValue(e.response.data);
        }
    }
);
export const fetchUserBytoken = createAsyncThunk(
    'users/fetchUserByToken',
    async ({ token }, thunkAPI) => {
      try {
        const response = await fetch(
          'https://...',
          {
            method: 'GET',
            headers: {
              Accept: 'application/json',
              Authorization: token,
              'Content-Type': 'application/json',
            },
          }
        );
        let data = await response.json();
        console.log('data', data, response.status);
        if (response.status === 200) {
          return { ...data };
        } else {
          return thunkAPI.rejectWithValue(data);
        }
      } catch (e) {
        console.log('Error', e.response.data);
        return thunkAPI.rejectWithValue(e.response.data);
      }
    }
  );

你的功能都是正確的。 唯一的問題是順序。 在定義變量之前,您不能使用變量signupUser等。 您需要重新排列文件,以便 thunk 操作創建者出現在createSlice之前。

像這樣:

import { createSlice, createAsyncThunk} from '@reduxjs/toolkit';

export const signupUser = createAsyncThunk( ...

export const loginUser = createAsyncThunk( ...

export const fetchUserBytoken = createAsyncThunk( ...

export const userSlice = createSlice({ ...

export const userSelector = ...

TypeError: 無法分配給 object 的只讀屬性 '#<object> ' Redux Tool Kit Slice for Firebase Storage REACT NATIVE<div id="text_translate"><p> 您好,我在上傳到 firebase 存儲后嘗試設置我的 downloadUrl,但我似乎無法讓它與 Redux 工具包一起使用。 我有一個解決方案,但我寧願以正確的方式使用它,但我似乎無法弄清楚它是否願意得到一些反饋</p><pre> incrementByAmount: (state, action) =&gt; { state.value += action.payload },</pre><p> 這是<strong>文檔</strong>示例。 我知道數字與對象的工作方式不同,<strong>但如果他們可以像這樣改變它,為什么我不能呢?</strong></p><pre> setImageUrl: (state, action: PayloadAction&lt;string&gt;) =&gt; { state.imageUrl = action.payload; },</pre><p> <strong>這就是我所說的</strong></p><pre> const downloadUrl = await FirebaseStorageService.uploadFile( photo, setUploadProgress ); dispatch(setImageUrl(downloadUrl));</pre><p> 這是錯誤</p><pre>ossible Unhandled Promise Rejection (id: 5): TypeError: Cannot assign to read only property 'imageUrl' of object '#&lt;Object&gt;' TypeError: Cannot assign to read only property 'imageUrl' of object '#&lt;Object&gt;'</pre><p> 提前謝謝你 我在其他地方看到過類似的問題,但我覺得答案不清楚。 我可以直接或不使用 RTK 更改 object 的屬性嗎?</p></div></object>

[英]TypeError: Cannot assign to read only property '' of object '#<Object>' Redux Tool Kit Slice for Firebase Storage REACT NATIVE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 TypeError: 無法分配給 object 的只讀屬性 '#<object> ' Redux Tool Kit Slice for Firebase Storage REACT NATIVE<div id="text_translate"><p> 您好,我在上傳到 firebase 存儲后嘗試設置我的 downloadUrl,但我似乎無法讓它與 Redux 工具包一起使用。 我有一個解決方案,但我寧願以正確的方式使用它,但我似乎無法弄清楚它是否願意得到一些反饋</p><pre> incrementByAmount: (state, action) =&gt; { state.value += action.payload },</pre><p> 這是<strong>文檔</strong>示例。 我知道數字與對象的工作方式不同,<strong>但如果他們可以像這樣改變它,為什么我不能呢?</strong></p><pre> setImageUrl: (state, action: PayloadAction&lt;string&gt;) =&gt; { state.imageUrl = action.payload; },</pre><p> <strong>這就是我所說的</strong></p><pre> const downloadUrl = await FirebaseStorageService.uploadFile( photo, setUploadProgress ); dispatch(setImageUrl(downloadUrl));</pre><p> 這是錯誤</p><pre>ossible Unhandled Promise Rejection (id: 5): TypeError: Cannot assign to read only property 'imageUrl' of object '#&lt;Object&gt;' TypeError: Cannot assign to read only property 'imageUrl' of object '#&lt;Object&gt;'</pre><p> 提前謝謝你 我在其他地方看到過類似的問題,但我覺得答案不清楚。 我可以直接或不使用 RTK 更改 object 的屬性嗎?</p></div></object> React / Redux:TypeError:無法讀取未定義的屬性 React-Redux TypeError:無法讀取未定義的屬性“ setStatus” 類型錯誤:無法讀取未定義的 React Native Redux 的屬性“map” React / Redux:TypeError:無法讀取未定義的屬性“目標” React Redux TypeError:無法讀取未定義的屬性“ map” Uncaught TypeError:無法讀取未定義的React / Redux的屬性&#39;type&#39; React Redux - Uncaught(in promise)TypeError:無法讀取未定義的屬性&#39;props&#39; React-Redux:未捕獲的類型錯誤:無法讀取未定義的屬性“名稱” TypeError:無法讀取react-redux中未定義的屬性“map”
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM