当前位置: 首页 > 知识库问答 >
问题:

正在处理Mern堆栈应用程序-更新操作

弓俊晖
2023-03-14
import React from 'react';
import { Button, Table, Modal, Form, FormControl } from 'react-bootstrap';
import axios from 'axios';
import CompanyEditModal from './CompanyEditModal';

const Company = props => (
  <tr>
    <td>{props.company.companyName}</td>
    <td>{props.company.taxOffice}</td>
    <td>{props.company.taxNumber}</td>
    <td>{props.company.date}</td>
    <td>
      <Button
        variant="danger"
        onClick={() => props.onDelete(props.company._id)}
        style={{ marginRight: '20px' }}
      >
        Sil
      </Button>
      <Button variant="primary" onClick={() => ...... TO BE DONE}>
        Edit
      </Button>
    </td>
  </tr>
);

class Companies extends React.Component {
  state = {
    companies: [],
    companyName: '',
    taxOffice: '',
    taxNumber: '',
    companyId: '',
    show: false,
    searchTerm: ''
  };

  onChange_1 = e => {
    this.setState({
      companyName: e.target.value
    });
  };
  onChange_2 = e => {
    this.setState({
      taxOffice: e.target.value
    });
  };
  onChange_3 = e => {
    this.setState({
      taxNumber: e.target.value
    });
  };

  onSubmit = e => {
    e.preventDefault();

    const company = {
      companyName: this.state.companyName,
      taxOffice: this.state.taxOffice,
      taxNumber: this.state.taxNumber
    };

    console.log(company);

    axios.post('http://localhost:5000/companies/add', company).then(res => {
      console.log(res.data);
      window.location.reload();
    });

    this.setState({
      companyName: ''
    });
  };

  CompanyModal = () => {
    const handleClose = () => this.setState({ show: false });
    const handleShow = () => this.setState({ show: true });

    return (
      <>
        <Button variant="success" type="submit" onClick={handleShow}>
          + Firma Ekle
        </Button>

        <Modal show={this.state.show} onHide={handleClose}>
          <Modal.Header closeButton>
            <Modal.Title>Firma Ekle</Modal.Title>
          </Modal.Header>
          <Modal.Body>
            <Form onSubmit={this.onSubmit}>
              <Form.Label>Firma Adı:</Form.Label>
              <Form.Control
                placeholder="* Firma Adını Giriniz"
                onChange={this.onChange_1}
                value={this.state.companyName}
              />
              <Form.Text className="text-muted">* Girmek zorunludur.</Form.Text>
              <br />
              <Form.Label>Vergi Dairesi:</Form.Label>
              <Form.Control
                placeholder="Vergi Dairesini Giriniz"
                onChange={this.onChange_2}
                value={this.state.taxOffice}
              />
              <br />
              <Form.Label>Vergi Numarası:</Form.Label>
              <Form.Control
                placeholder="Vergi Numarasını Giriniz"
                onChange={this.onChange_3}
                value={this.state.taxNumber}
              />
              <br />
              <Button variant="primary" type="submit" onClick={handleClose}>
                Kaydet
              </Button>
              <Button variant="danger" onClick={handleClose}>
                Kapat
              </Button>
            </Form>
          </Modal.Body>
        </Modal>
      </>
    );
  };

  componentDidMount() {
    axios
      .get('http://localhost:5000/companies/')
      .then(response => {
        this.setState({ companies: response.data });
      })
      .catch(error => {
        console.log(error);
      });
  }

  onDelete = id => {
    axios.delete('http://localhost:5000/companies/' + id).then(response => {
      console.log(response.data);
    });

    this.setState({
      companies: this.state.companies.filter(el => el._id !== id)
    });
  };

  onEdit = id => {
    axios.post('http://localhost:5000/companies/edit/' + id).then(response => {
      console.log(response.data);
    });

    this.setState({
      companies: to be done
    });
  };

  companyList() {
    if (!this.state.searchTerm) {
      return this.state.companies.map(currentcompany => {
        return (
          <Company
            company={currentcompany}
            onDelete={this.onDelete}
            key={currentcompany._id}
          />
        );
      });
    } else {
      return this.state.companies
        .filter(company => {
          return company.companyName
            .toLowerCase()
            .includes(this.state.searchTerm);
        })
        .map(matchingCompany => {
          return (
            <Company
              company={matchingCompany}
              onDelete={this.onDelete}
              key={matchingCompany._id}
            />
          );
        });
    }
  }

  onSearchCompanyName = e => {
    this.setState({
      searchTerm: e.target.value
    });
  };

  render() {
    return (
      <div>
        <br />
        <h2>Firmalar</h2>
        <hr />
        <this.CompanyModal />
        <hr />
        <Form>
          <FormControl
            placeholder="Firma Ara"
            onChange={this.onSearchCompanyName}
            value={this.state.searchTerm}
          ></FormControl>
        </Form>
        <br />

        <Table striped bordered hover>
          <thead>
            <tr>
              <th>Firma Adı</th>
              <th>Vergi Dairesi</th>
              <th>Vergi Numarası</th>
              <th>Eklenme Tarihi</th>
              <th>Düzenle</th>
            </tr>
          </thead>
          <tbody>{this.companyList()}</tbody>
        </Table>
      </div>
    );
  }
}

export default Companies;

节目视图:截图

  • 这是一个MERN项目:
  • 我正在开发一个web应用程序,可以对公司模型进行用户CRUD操作。
  • 我已经执行了Get-Add-Delete操作,但我对更新操作感到困惑。
  • 我想使用我的CompanyModal(它是一个用于添加公司的引导模式)组件模式来编辑公司。
  • 你能给点提示或建议做这件事吗?其实我脑子一片空白。

共有1个答案

龚同
2023-03-14
   const Company = props => (
      <tr>
        <td>{props.company.companyName}</td>
        <td>{props.company.taxOffice}</td>
        <td>{props.company.taxNumber}</td>
        <td>{props.company.date}</td>
        <td>
          <Button variant="danger" onClick={()=>handleDelete(props)}>Delete</Button>
        </td>
        <td>
          <Button variant="success" onClick={()=>handleEdit(props)}>Edit</Button>
        </td>
      </tr>
    );

在将数据传递给Company组件的位置定义HandleDelete函数

handleDelete=(data)=>{
  // make api request to delete object by(data.id)
}
handleEdit=(data)=>{
 //make your model show to true
 // then set your data fiels to state.
 // then make your model show to false after updation
}

HandleDeleteHandleEdit传递给Company组件

    companyList() {
        return this.state.companies.map(currentcompany => {
          return <Company handleDelete={this.handleDelete} 
          company={currentcompany} key={currentcompany._id} 
          handleEdit={this.handleEdit}/>;
        });
      }
 类似资料:
  • 我正在尝试将Google Maps添加到我的MERN Stack应用程序中。根据一些消息来源,我发现在create-react-app中添加.env文件并不能解决隐藏API_Keys(https://create-react-app.dev/docs/adding-custom-environment-variables/)的目的。如何将API_KEYS存储在后端(node.js)中并从React

  • 我正试图找到一种方法来更新我的“用户”状态,但我在这里已经停留了3天,我需要一些帮助。 下面是我的用户上下文: 这里是我试图更新用户的地方。在我的例子中,我试图在user.cart数组中推送一个对象,因为后端的一切都很好,但在前端,状态不更新: > 首先使用UserContext: const Products=()=>{ 然后我试图更新用户状态,但当我单击该按钮时,它将我注销: 将我注销后,Us

  • 我需要帮助在类别上发布多个数据,当我在选择输入上选择多个数据并提交时,它会抛出错误。请参阅下面的错误 下面是模型模式。模型 这是我的路线文件。路线 当我在输入选择上选择多个时,这是我提交时的错误。 但当我只选择一个时,它就会通过。我只能保存一个在五月类别字段,我想保存多个在我的类别字段。

  • 下面是我MERN项目的文件结构。 客户端文件夹包含反应服务器。客户端在<code>localhost.Client上运行。comServer文件夹包含节点的代码。js服务器。服务器运行于 每当我从客户端向服务器发出请求时。如何缓解 csrf 攻击?确保向服务器发出的请求来自客户端,而不是来自任何其他源。

  • 问题内容: 我有这个Python应用程序,它有时会卡住,我找不到位置。 有什么方法可以让Python解释器向您显示正在运行的确切代码吗? 某种动态堆栈跟踪? 问题答案: 我有用于以下情况的模块-进程将长时间运行,但有时由于未知且不可复制的原因而卡住。它有点hacky,并且只能在unix上运行(需要信号): 要使用它,只需在程序启动时在某个时候调用listen()函数(您甚至可以将其粘贴在site.

  • 我正在尝试从数据库中提取数据。我从回应中得到的都是这样的: 我需要帮助如何在前端和后端提出请求: 以下是ReactJS方面: 以下是请求的服务器端: 以下是ProductService: 附注:产品在MongoDB Compass中创建时没有错误: