簡體   English   中英

類型錯誤:Object.key 是只讀的

[英]TypeError: Object.key is read-only

伙計們。 我正在嘗試在我的發票應用程序上實現編輯功能,我將發票作為道具傳遞以形成 state,如下所示:

const EditInvoice = ({invoice}) => {
  const [formInputs, setFormInputs] = useState([
  ]);
  const [form,setForm] = useState({
      clientCity : invoice.clientAddress.city,
      clientCountry : invoice.clientAddress.country,
      clientPostCode : invoice.clientAddress.postCode,
      clientStreet : invoice.clientAddress.street,
    clientEmail : invoice.clientEmail,
    clientName : invoice.clientName,
    createdAt : invoice.createdAt,
    description : invoice.description,
    id : invoice.id,
    items: formInputs,
    paymentDue : invoice.paymentDue,
    paymentTerms : invoice.paymentTerms,
      senderCity : invoice.senderAddress.city,
      senderCountry : invoice.senderAddress.country,
      senderPostCode : invoice.senderAddress.postCode,
      senderStreet : invoice.senderAddress.street,
    status : invoice.status,
    total : invoice.total
  })

此時一切正常,handleChange function 適用於除 formInputs 之外的所有內容,我嘗試像這樣設置 formInputs state const [formInputs, setFormInputs] = useState([...invoice.items]); 並使用 useEffect,如下所示:

useEffect(() =>{
    setFormInputs([...invoice.items])
  },[])

他們都填充了這些字段,但是如果我嘗試更新我的發票項目數組,我會收到只讀類型錯誤,以防萬一,這就是我用於我的 handleChange function

const handleItemChange = (index,e) =>{
    const values = [...formInputs]
    values[index][e.target.name] = e.target.value;
    values[index].total = (values[index].price * values[index].quantity).toFixed(2);
    setFormInputs(values)
  }

希望各位大神給個解決辦法,先謝謝了!

我不知道這是否是一種 hacky 方式,但這個解決方案似乎有效。

useEffect(() =>{
    invoice.items.map(item => setFormInputs(prevState => ([...prevState, {
      id : item.id,
      name : item.name,
      quantity : item.quantity,
      price : item.price,
      total : item.total
    }])))
    console.log(formInputs);
  },[])

您的代碼中的問題是您正在嘗試重新分配一個只讀const值(它會阻止重新分配)。 將您的值定義為let

所以而不是

const values

你應該把它定義為

let values

由於state可能會異步更新,因此您不應依賴它們的值來計算下一個 state。

像這樣改變方法:

const handleItemChange = (index,e) =>{
  setFormInputs(prevValues => {
    const newValues = [ ...prevValues];
    newValues[index][e.target.name] = e.target.value;
    newValues[index].total = (values[index].price * values[index].quantity).toFixed(2);
    return newValues;
  })
}

類型錯誤:無法分配給 object 的只讀屬性“項目”'#<object> '<div id="text_translate"><p> 我有這個問題一天,這是我當前的 state 結構:</p><pre> const [inputFields, setInputFields] = useState([ { item: '', quantityIssued: 0, quantityRequested: '', remarks: '', unit: '', }, ])</pre><p> 當我單擊編輯按鈕時,我需要將日期填寫到我的 state 例如。</p><pre> const editHandler = (order) =&gt; { const custom = [ { item: 'test', quantityIssued: 0, quantityRequested: 7, remarks: '8', unit: '1', }, { item: 'test2', quantityIssued: 0, quantityRequested: 7, remarks: '8', unit: '1', }, ] setInputFields(custom) }</pre><p> 當我使用該自定義數據時,我可以編輯 state 的數據,但是當我嘗試從具有相同結構的服務器中獲取該數據時,我會收到錯誤消息,例如:</p><pre> const editHandler = (order) =&gt; { setInputFields(order.orderItems) }</pre><p> 雖然它們是我在上面向您展示的相同數據,但如果我編輯它,我無法編輯它說錯誤標題<strong>無法分配只讀屬性</strong></p><p>這是我的界面: <a href="https://i.stack.imgur.com/34ZlA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/34ZlA.png" alt="在此處輸入圖像描述"></a></p></div></object>

[英]TypeError: Cannot assign to read only property 'item' of object '#<Object>'

TypeError: 無法分配給 object 的只讀屬性 'children' '#<object> '<div id="text_translate"><p> 使用 docker 構建的下一個 js 在包含 getServerSideProps package.json 的所有路由中重新加載時進入內部服務器錯誤</p><ul><li>反應:“17.0.2”</li><li> 下一個:“^11.1.2”</li></ul><p> <strong>在本地</strong>一切正常,如果我<strong>在沒有 docker 的情況下部署它</strong>。 但是在我打開網站后使用<strong>docker</strong> 。 如果我使用客戶端路由器導航,一切都很好。 但是一旦我重新加載頁面,它就會進入內部服務器錯誤並且不會重建頁面<a href="https://i.stack.imgur.com/FCgpe.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FCgpe.png" alt="在此處輸入圖像描述"></a></p><p> 檢查 docker 日志后,我發現了這個</p><pre>TypeError: Cannot assign to read only property 'children' of object '#&lt;Object&gt;' at /app/.next/server/chunks/6859.js:792:29 at /app/node_modules/react/cjs/react.development.js:1067:17 at mapIntoArray (/app/node_modules/react/cjs/react.development.js:964:23) at mapIntoArray (/app/node_modules/react/cjs/react.development.js:1004:23) at Object.mapChildren [as map] (/app/node_modules/react/cjs/react.development.js:1066:3) at Head.makeStylesheetInert (/app/.next/server/chunks/6859.js:782:36) at Head.render (/app/.next/server/chunks/6859.js:839:23) at processChild (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3450:18) at resolve (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3270:5) at ReactDOMServerRenderer.render (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3753:22) at ReactDOMServerRenderer.read (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3690:29) at Object.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:4314:27) at Object.renderToHTML (/app/node_modules/next/dist/server/render.js:711:41) at runMicrotasks (&lt;anonymous&gt;) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async doRender (/app/node_modules/next/dist/server/next-server.js:1149:38)</pre></div></object>

[英]TypeError: Cannot assign to read only property 'children' of object '#<Object>'

暫無
暫無

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

相關問題 TypeError:“名稱”是只讀的 無法分配給 object 的只讀屬性 如何添加<tablerow>在for循環和Object.key之間</tablerow> 為什么使用“key”作為對象的鍵會導致調用 object.key 返回 null? 組件第一次渲染后,對象變為只讀 添加/刪除React Grid布局示例:TypeError:“ exports”為只讀 object.key 用於使用 object 作為 map 上的數組,不能將參數作為道具傳遞給 React 組件 ReactJs - TypeError:無法分配給對象“#”的只讀屬性“transform”<Object> &#39; 類型錯誤:無法分配給 object 的只讀屬性“項目”'#<object> '<div id="text_translate"><p> 我有這個問題一天,這是我當前的 state 結構:</p><pre> const [inputFields, setInputFields] = useState([ { item: '', quantityIssued: 0, quantityRequested: '', remarks: '', unit: '', }, ])</pre><p> 當我單擊編輯按鈕時,我需要將日期填寫到我的 state 例如。</p><pre> const editHandler = (order) =&gt; { const custom = [ { item: 'test', quantityIssued: 0, quantityRequested: 7, remarks: '8', unit: '1', }, { item: 'test2', quantityIssued: 0, quantityRequested: 7, remarks: '8', unit: '1', }, ] setInputFields(custom) }</pre><p> 當我使用該自定義數據時,我可以編輯 state 的數據,但是當我嘗試從具有相同結構的服務器中獲取該數據時,我會收到錯誤消息,例如:</p><pre> const editHandler = (order) =&gt; { setInputFields(order.orderItems) }</pre><p> 雖然它們是我在上面向您展示的相同數據,但如果我編輯它,我無法編輯它說錯誤標題<strong>無法分配只讀屬性</strong></p><p>這是我的界面: <a href="https://i.stack.imgur.com/34ZlA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/34ZlA.png" alt="在此處輸入圖像描述"></a></p></div></object> TypeError: 無法分配給 object 的只讀屬性 'children' '#<object> '<div id="text_translate"><p> 使用 docker 構建的下一個 js 在包含 getServerSideProps package.json 的所有路由中重新加載時進入內部服務器錯誤</p><ul><li>反應:“17.0.2”</li><li> 下一個:“^11.1.2”</li></ul><p> <strong>在本地</strong>一切正常,如果我<strong>在沒有 docker 的情況下部署它</strong>。 但是在我打開網站后使用<strong>docker</strong> 。 如果我使用客戶端路由器導航,一切都很好。 但是一旦我重新加載頁面,它就會進入內部服務器錯誤並且不會重建頁面<a href="https://i.stack.imgur.com/FCgpe.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/FCgpe.png" alt="在此處輸入圖像描述"></a></p><p> 檢查 docker 日志后,我發現了這個</p><pre>TypeError: Cannot assign to read only property 'children' of object '#&lt;Object&gt;' at /app/.next/server/chunks/6859.js:792:29 at /app/node_modules/react/cjs/react.development.js:1067:17 at mapIntoArray (/app/node_modules/react/cjs/react.development.js:964:23) at mapIntoArray (/app/node_modules/react/cjs/react.development.js:1004:23) at Object.mapChildren [as map] (/app/node_modules/react/cjs/react.development.js:1066:3) at Head.makeStylesheetInert (/app/.next/server/chunks/6859.js:782:36) at Head.render (/app/.next/server/chunks/6859.js:839:23) at processChild (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3450:18) at resolve (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3270:5) at ReactDOMServerRenderer.render (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3753:22) at ReactDOMServerRenderer.read (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:3690:29) at Object.renderToStaticMarkup (/app/node_modules/react-dom/cjs/react-dom-server.node.development.js:4314:27) at Object.renderToHTML (/app/node_modules/next/dist/server/render.js:711:41) at runMicrotasks (&lt;anonymous&gt;) at processTicksAndRejections (node:internal/process/task_queues:96:5) at async doRender (/app/node_modules/next/dist/server/next-server.js:1149:38)</pre></div></object>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM