簡體   English   中英

UI 未顯示 react redux 工具包應用程序中數組項的更改

[英]UI is not displaying changes from an array item in a react redux tool kit app

我正在使用 react-redux 工具包開發 ToDo 應用程序。我可以成功讀取/顯示、插入和刪除但不能更新,因為 UI 沒有顯示對待辦事項所做的更改,即使我看到Redux ToolsDev的更改。
我認為負責使用狀態數組顯示所有待辦事項的<ToDoList/>組件不會重新渲染,因為沒有檢測數組本身的變化,因為數組項 (todo) 是唯一更新的。
代碼:
toDoSlice

const initialState = {
  toDos: [
    { id: nanoid(), text: "First ToDo" },
    { id: nanoid(), text: "Second ToDo" },
  ],
  text: "",
};
const toDoSlice = createSlice({
  name: "toDo",
  initialState,
  reducers: {
    saveChanges: (state, action) => {
      state.toDos[action.payload].text = state.text;
      //  updating other state values...
    },
  },
});
export const selectToDos = (state) => state.todo.toDos;
export const selectText = (state) => state.todo.text;
export const selectEditStatus = (state) => state.todo.editStatus;
export const { saveChanges } = toDoSlice.actions;
export default toDoSlice.reducer;

<ToDoList/>從數組中顯示待辦事項

export default function ToDoList({ toDos }) {
  return (
    <form className="p-3" style={{ backgroundColor: "#F0E8E5" }}>
      <h2>List</h2>
      {toDos.map((todo) => (
        <ToDo key={todo.id} {...todo} />
      ))}
    </form>
  );
}

<ToDo/>使用 id 和文本顯示待辦事項

export default function ToDo({ id, text }) {
  const dispatch = useDispatch();
  return (
    <>
      <div className="input-group mt-3">
        <input type="text" className="form-control" defaultValue={text} />
        <button
          type="button"
          className="btn btn-warning"
          onClick={() => dispatch(editToDo(id))}
        >
          Update
        </button>
        <button
          type="button"
          className="btn btn-danger"
          onClick={() => dispatch(deleteTodo(id))}
        >
          Delete
        </button>
      </div>
    </>
  );
}

如果您在開發工具中看到組件更新但沒有重新渲染,那么問題很可能是存儲連接到ToDoList組件的方式。

這是一個 StackBlitz,顯示了所有連接在一起的代碼- 我創建了一個簡單的“主機”組件,它使用您的selectToDos選擇器將存儲連接到ToDoList -

function ToDoListHost() {
  const toDos = useSelector(selectToDos);

  return (
    <ToDoList toDos={toDos} />
  );
}

我還稍微更改了ToDo組件,以便通過在輸入字段中連接onChange事件來立即將每個更新傳播到商店:

import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import { editToDo, deleteToDo } from './store';

export default function ToDo({ id, text }) {
  const dispatch = useDispatch();

  const handleChange = event => 
    dispatch(editToDo({ id, text: event.target.value }));

  return (
    <>
      <div className="input-group mt-3">
        <input 
          type="text"
          className="form-control"
          value={text}
          onChange={handleChange} 
        />
        <button
          type="button"
          className="btn btn-danger"
          onClick={() => dispatch(deleteToDo(id))}
        >
          Delete
        </button>
      </div>
    </>
  );
}

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.

相關問題 UI 上的 REACT 渲染數組來自 redux state 如何在反應組件之外獲取 state(使用 redux 工具包) 顯示反應組件中 redux state 變化的問題 React &amp; Redux CRUD:顯示單個項目不起作用 使用Redux / React在數組中移動項目 從數組中刪除項目(React-Native + Redux) React-Redux:如何從數組中添加每個項目 在 React/Redux 應用程序中顯示信息的問題 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> 在Redux中從數組中刪除項目
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM