首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编辑textarea返回无法读取未定义属性

编辑textarea返回无法读取未定义属性
EN

Stack Overflow用户
提问于 2022-08-01 08:38:23
回答 1查看 38关注 0票数 0

我正在创建一个Grid,当用户单击详细信息行(加号)时,一个文本区域弹出,他可以在其中键入。当前,当用户在textarea中键入某些内容时,我会得到以下错误:

代码语言:javascript
运行
复制
Cannot read properties of undefined

我也搞不懂为什么。函数是定义的,在正确的上下文中,为什么会发生此错误,以及如何修复它?这是我的代码:

代码语言:javascript
运行
复制
import React, { useState } from 'react';
import * as ReactDOM from 'react-dom';
import {
  Grid,
  GridColumn as Column,
  GridDetailRowProps,
  GridExpandChangeEvent,
} from '@progress/kendo-react-grid';
import { TextArea } from '@progress/kendo-react-inputs';

import products from './products.json';
import { Product } from './interfaces';

const DetailComponent = (props: GridDetailRowProps) => {
  const dataItem = props.dataItem;

  return (
    <section>
      <p>
        <strong>In Stock:</strong>{' '}
        <TextArea
          value={dataItem.UnitsInStock}
          onChange={(e, props) =>
            props.editDetailItem(dataItem, e.value, 'UnitsInStock')
          }
        />
      </p>
      <p>
        <strong>On Order:</strong>{' '}
        <TextArea
          value={dataItem.UnitsOnOrder}
          onChange={(e, props) =>
            props.editDetailItem(dataItem, e.value, 'UnitsOnOrder')
          }
        />
      </p>
    </section>
  );
};

const App = () => {
  const [data, setData] = React.useState<Array<Product>>(products.slice(0));
  const [rerender, setRerender] = useState(false);

  const expandChange = (event) => {
    event.dataItem.expanded = !event.dataItem.expanded;
    setRerender(!rerender);
  };

  const editDetailItem = (updatedItem, value, field) => {
    // let newData = this.state.data.map((item) => {
    //   if (updatedItem.ProductID === item.ProductID) {
    //     item[field] = value;
    //   }
    //   return item;
    // });
    // this.setState({
    //   data: newData,
    // });
    let newData = data.map((item) => {
      if (updatedItem.ProductID === item.ProductID) {
        item[field] = value;
      }
      return item;
    });
    setData(newData);
  };

  const MyDetailComponent = (props) => (
    <DetailComponent {...props} editDetailItem={editDetailItem} />
  );

  return (
    <Grid
      data={data}
      detail={MyDetailComponent}
      style={{ height: '400px' }}
      expandField="expanded"
      onExpandChange={expandChange}
    >
      <Column field="ProductName" title="Product" width="300px" />
      <Column field="ProductID" title="ID" width="50px" />
      <Column field="UnitPrice" title="Unit Price" width="100px" />
      <Column field="QuantityPerUnit" title="Qty Per Unit" />
    </Grid>
  );
};
ReactDOM.render(<App />, document.querySelector('my-app'));

下面是一个可重复的例子:https://stackblitz.com/edit/react-k6glrs?file=app%2Fmain.tsx

EN

回答 1

Stack Overflow用户

发布于 2022-08-01 08:42:53

不要使用onChange的道具

从onChange中移除道具

代码语言:javascript
运行
复制
          onChange={(e) =>
            props.editDetailItem(dataItem, e.value, 'UnitsInStock')
          }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73190978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档