【发布时间】:2020-04-18 16:47:39
【问题描述】:
React 告诉我们尽可能将代码分成组件。 我有所有这些代码,我有一个表格,其中有一个按钮,可以打开一个对话框来输入数据并使用 handleChange 函数保存它们,但是将所有这些放在一起,生成数据输入非常慢。
使用handleChange函数,处理设置对象状态的钩子表单输入样式的OnChange事件。
如果我创建一个 console.log,该值会显示我输入的完整值,但在这种情况下,我在 9 上缺少最后一个字符
alias 123 456 789
State {"code":530,"email":"","alias":"123 456 78"}
我想要实现的是将表格和对话框分成两个不同的组件
如何将表格与对话框分开?
import React, { useState, useEffect } from 'react';
import MaterialTable from 'material-table';
import {TextField,Button} from '@material-ui/core';
import Dialog from "@material-ui/core/Dialog";
import DialogActions from "@material-ui/core/DialogActions";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";
import DialogTitle from "@material-ui/core/DialogTitle";
import axios from 'axios';
export default function dialog(props){
const [open, setOpen] = useState(false);
const handleClickOpen = () => {
setOpen(true);
};
const handleClose = () => {
setOpen(false);
};
const initialState={code:0, email:'', alias:''}
const[subscription, setSubscription]=useState(initialState);
const handleChange=(event)=>{
setSubscription({...subscription,[event.target.name]:event.target.value})
}
const handleSubmit=(event)=>{
event.preventDefault();
if(!subscription.code || !subscription.email || !subscription.alias)
return
const postSubscription=async()=>{
try {
axios.post('/api/Subscription/add',subscription);
props.history.push('/Subscription');
}
catch (error) {
console.log('error', error);
}
}
postSubscription();
}
const[user, setUser]= useState({Users:[]});
useEffect(()=>{
const getUser=async()=>{
const response =await axios.get('/api/users');
setUser(response.data);
console.log(response.data)
}
getUser();
},[]);
return(
<div>
<MaterialTable
title="Users"
columns={[
{ title: 'Code', field: 'code' , type: 'numeric'},
{ title: 'Name', field: 'name' },
{ title: 'Lastname', field: 'lastname' },
{ title: 'Age', field: 'age', type: 'numeric'},
]}
data={user.Users}
actions={[
{
icon: 'account_box',
tooltip: 'Add subscription',
onClick:()=>{ handleClickOpen()}
}
]}
/>
<Dialog open={open} onClose={handleClose} aria-labelledby="form-dialog-title">
<DialogTitle id="form-dialog-title">Subscription></DialogTitle>
<DialogContent>
<DialogContentText>
Subscription
</DialogContentText>
<form onSubmit={handleSubmit} >
<TextField
id="filled-name"
name="code"
label="Code"
value={subscription.code}
onChange={handleChange}
margin="normal"
variant="outlined"
/>
<TextField
id="filled-name"
label="Email"
value={subscription.email}
name="email"
onChange={handleChange}
margin="normal"
variant="outlined"
/>
<TextField
id="filled-multiline-static"
label="Alias"
value={subscription.alias}
name="alias"
onChange={handleChange}
margin="normal"
variant="outlined"
/>
<Button
variant="contained"
color="primary"
type="submit">
Add
</Button>
</form>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} color="primary">
Cancel
</Button>
</DialogActions>
</Dialog>
</div>
);
}
【问题讨论】:
-
您所说的“但是将所有这些放在一起会导致数据输入非常慢”是什么意思?
-
请在
What you want the Components to DO上提供更多信息。表和 。对话框。如果我们不知道您想使用这些组件执行什么操作,我们将无法为您提供太多帮助。另外@Akshit Mehra问题也很有效.. -
我还建议,如果您想真正了解 React,并且时间允许,请为对话框和表格创建可重用的组件。这将为您提供有关事物如何工作的惊人见解,并允许您操纵组件的行为方式,而不是像自己一样使用它们。
-
@AkshitMehra 当我打开对话框时,在文本字段中输入数据时速度非常慢
-
@DimitrisEfst 你说得对,我已经编辑了我的问题,我认为我想要实现的目标更加清晰
标签: reactjs material-ui react-hooks