繁体   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