【发布时间】:2021-11-12 14:30:27
【问题描述】:
我是 material-ui 的新手,对于自动完成的边距,我无法直截了当。
我有一个结合了 Autocomplete 和 TextInput 的表单。但是 Autocomplete 与 TextInput 的位置表现得很奇怪(对我来说)。自动完成是否会呈现某种带有 TextInput 没有的边距的“框”?在这里,我必须在 TextInput 上添加边距以使它们对齐,但我仍然在我想要的自动完成上留下了 marginLeft。显然我可以为它添加样式,但这会导致 {xs} 大小在缩放时中断。
正如您在图片中看到的那样,Autocomplete 的边距与 TextInput 相差甚远:
非常感谢任何能让我朝着正确方向前进的东西。
代码如下:
import React, { useState, useEffect } from 'react';
import Autocomplete from '@material-ui/lab/Autocomplete';
import TextField from '@material-ui/core/TextField';
import Grid from '@material-ui/core/Grid';
export default function AddPurchase() {
const [coinList, setCoinList] = useState([]);
const [name, setName] = useState('');
const [symbol, setSymbol] = useState('');
const [date, setDate] = useState('');
const [price, setPrice] = useState('');
const [amount, setAmount] = useState('');
const data = {
name: name,
symbol: symbol,
date: date,
price: price,
amount: amount
}
const handleName = (e, value) => {
if (value !== null) {
setName(value.substring(0, value.lastIndexOf('-') - 1));
}
else {
setName('')
}
}
const handleSymbol = (e, value) => {
if (value !== null) {
setSymbol(value.substring(value.lastIndexOf('-') + 2));
}
else {
setSymbol('');
}
console.log(value);
}
const handleDate = (e) => {
setDate(e.target.value);
}
const handlePrice = (e) => {
setPrice(e.target.value);
}
const handleAmount = (e) => {
setAmount(e.target.value);
}
const getCoins = useEffect(() => {
let mounted = true;
fetch('http://127.0.0.1:5000/api/v1/coins/list')
.then(res => res.json())
.then(items => {
if (mounted) {
setCoinList(items)
}
})
return () => mounted = false;
}, [])
console.log(data)
return (
<form>
<Grid container >
<Grid item xs={12} md={3}>
<Autocomplete
id="get-coin"
noOptionsText={'Coin not found...'}
options={coinList.map(item => (`${item.name} - ${item.symbol.toUpperCase()}`))}
onChange={(e, value) => { handleName(e, value); handleSymbol(e, value) }}
renderInput={(params) => (
<TextField {...params} label="Add coin" margin="normal" variant="outlined" />
)}
/>
</Grid>
<Grid item xs={12} md={3}>
<TextField
onChange={handleDate}
label="Date"
variant="outlined"
style={{ width: 250 }}
margin="normal"
>
</TextField>
</Grid>
<Grid item xs={12} md={3}>
<TextField
onChange={handlePrice}
label="Price"
variant="outlined"
style={{ width: 250 }}
margin="normal"
>
</TextField>
</Grid>
<Grid item xs={12} md={3}>
<TextField
onChange={handleAmount}
label="Amount"
variant="outlined"
style={{ width: 250 }}
margin="normal"
>
</TextField>
</Grid>
</Grid>
</form>
);
}
【问题讨论】:
-
您能否提供该组件的完整代码以及所有外部导入。
-
@KavinduVIndika 更新了!
-
Imo,您的 TextField 和您的自动完成渲染之间的唯一区别是您为 TextField 而不是为您的自动完成 TextField 提供的
style={{ width: 250 }}(请参阅 renderInput)。除此之外,很难理解您在寻找什么。 -
@grenzbotin 就是这样,我在 TextField 上只有固定宽度,但自动完成带有某种默认定位(如图所示),这就是我想要摆脱的。对自动完成应用边距会在缩放时让位。
-
@Alecbalec 你确定它与你所做的一些 CSS 改编无关吗?如果我按照此处给出的代码获取您的代码,我将找不到边距:codesandbox.io/s/infallible-worker-blrkd?file=/src/App.js
标签: html css reactjs autocomplete material-ui