在react js中使用道具调用const中的函数。

问题描述 投票:0回答:1

我有一个仪表板,我在其中有一个函数,这是一个模态类型,它持有一个表单。当表单完成后,输入的数据就会出现在我的仪表板底部的表格中。

目前,表格中的数据加载得很好,但每当我点击按钮(带来了表单,当我输入init时,表单就会消失......基本上表单在点击时就会消失。

下面是我的代码......谢谢

import React, {useState,useContext,useEffect} from 'react';
import TransactionItem from '../components/TransactionItem';
import TransactionService from '../Services/TransactionService';
import Message from '../components/Message';
import { AuthContext } from '../Context/AuthContext';
import { Line, Pie } from "react-chartjs-2";
import {
  Card,
  CardHeader,
  CardBody,
  CardFooter,
  CardTitle,
  Table,
  Row,
  Col,
  Button,
  FormGroup,
  Input,
  Modal
} from "reactstrap";


const Dashboard = props => {
  const [transaction,setTransaction] = useState({amount : "", date : "", token : "", meter : "", transactionid : ""});
    const [transactions,setTransactions] = useState([]);
    const [message,setMessage] = useState(null);
    const authContext = useContext(AuthContext);

    useEffect(()=>{
      TransactionService.getTransactions().then(data =>{
          setTransactions(data.transactions);
      });
  },[]);

 
  function Recharge() {
    
  const [transactionModal, setTransactionModal] = useState(false);

  const onSubmit = e =>{
    e.preventDefault();
    TransactionService.postTransaction(transaction).then(data =>{
        const { message } = data;
        resetForm();
        if(!message.msgError){
            TransactionService.getTransactions().then(getData =>{
                setTransactions(getData.transactions);
                setMessage(message);
            });
        }
        else if(message.msgBody === "UnAuthorized"){
            setMessage(message);
            authContext.setUser({username : "", role : ""});
            authContext.setIsAuthenticated(false);
        }
        else{
            setMessage(message);
        }
    });
}

const onChange = e =>{
  setTransaction({...transaction,[e.target.name] : e.target.value});
  
}

const resetForm = ()=>{
  setTransaction({amount : "", date : "", token : "", meter : "", transactionid : ""});
}


return (

  <>
  <Button
    className="btn-round"
    color="success"
    type="button"
    onClick={() => setTransactionModal(true)}
  >Recharge
  </Button>
  <Modal
    isOpen={transactionModal}
    toggle={() => setTransactionModal(false)}
    modalClassName="modal-register"
  >
    <div className="modal-header no-border-header text-center">
      <button
        aria-label="Close"
        className="close"
        data-dismiss="modal"
        type="button"
        onClick={() => setTransactionModal(false)}
      >
        <span aria-hidden={true}>×</span>
      </button>

      <h3 className="modal-title text-center">Enter Details</h3>
      <p></p>
    </div>
    <div className="modal-body">
      <form onSubmit={onSubmit}>
      <FormGroup>
        <label>Amount</label>
        <Input 
          defaultValue="" 
          placeholder="Enter date" 
          name="amount"
          value={transaction.amount}
          onChange={onChange} 
          type="text" />
      </FormGroup>
      <FormGroup>
        <label>Date</label>
        <Input 
          defaultValue="" 
          name="date"
          value={transaction.date}
          onChange={onChange} 
          placeholder="Enter date" 
          type="text" />
      </FormGroup>
      <FormGroup>
        <label>Token</label>
        <Input 
          defaultValue="" 
          name="token"
          value={transaction.token}
          onChange={onChange}
          placeholder="Enter token" 
          type="text" />
      </FormGroup>
      <FormGroup>
        <label>Meter</label>
        <Input 
          defaultValue=""
          name="meter" 
          value={transaction.meter} 
          onChange={onChange}
          className="form-control"
          placeholder="Enter meter" 
          type="text" />
      </FormGroup>
      <FormGroup>
        <label>ID</label>
        <Input 
          defaultValue="" 
          placeholder="Enter Id" 
          name="transactionid" 
          value={transaction.transactionid} 
          onChange={onChange}
          type="text" />
      </FormGroup>
      <Button block className="btn-round" color="default" type="submit">
        Continue
      </Button>
      </form>
    </div>
    <div className="modal-footer no-border-footer">
      <span className="text-muted text-center">
      {message ? <Message message={message}/> : null}
      </span>
    </div>
  </Modal>
</>

) 

  }

    





  
    return (
      <>
        <div className="content">
          <Row>
            <Col lg="3" md="6" sm="6">
              <Card className="card-stats">
                <CardBody>
                  <Row>
                    <Col md="4" xs="5">
                      <Recharge />
                    </Col>
                    <Col md="8" xs="7">
                      <div className="numbers">
                        <p className="card-category">Last Transaction</p>
                        <CardTitle tag="p">315 Units</CardTitle>
                        <p />
                      </div>
                    </Col>
                  </Row>
                </CardBody>
                <CardFooter>
                  <hr />
                  <div className="stats">
                    <i className="fas fa-people-carry " /> Get help
                  
                  </div>
                </CardFooter>
              </Card>
            </Col>
          <Row>
          <Col md="12">
              <Card className="card-plain">
                <CardHeader>
                  <CardTitle tag="h4">Transactions</CardTitle>
                  <p className="card-category">
                    A list of your previous transactions
                  </p>
                </CardHeader>
                <CardBody>
                  <Table responsive>
                    <thead className="text-primary">
                      <tr>
                        <th>Date</th>
                        <th>Amount</th>
                        <th>Token</th>
                        <th className="text-right">Action</th>
                      </tr>
                    </thead>
                    <tbody>
                      
            
                            {
                                transactions.map(transaction  =>{
                                    return  (<tr><TransactionItem key={transaction._id} transaction={transaction} />

                                             </tr>)
                                })
                            }
                        
                
                     
                    </tbody>
                  </Table>
                </CardBody>
              </Card>
            </Col>
          </Row>
      
        </div>
      </>
    );
  }

export default Dashboard;
reactjs function modal-dialog const use-state
1个回答
0
投票

我将模态移动到另一个页面,并将其导入到仪表板中。现在工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.