【发布时间】:2021-01-29 00:29:46
【问题描述】:
目前,只要我输入一个数字,输入字段就会失去焦点。所以我拿了 shareToBuy.map 部分,然后将它分配给变量,然后将它移到 StockQuotes 组件之外。然后我收到错误消息,说 StyleTabledCell 和 StyleTable 行无法从材料 ui 中识别。如何重新排列我的组件以使输入字段不会失去焦点?或者有什么钩子可以用来解决这个问题吗?我尝试了 autofocus()、useRef 和将组件移到外面,但似乎没有任何效果。
import React, { useState, useEffect } from 'react';
import './StockQuotes.css';
import { createMuiTheme, withStyles, makeStyles, ThemeProvider } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import Table from '@material-ui/core/Table';
import TableBody from '@material-ui/core/TableBody';
import TableCell from '@material-ui/core/TableCell';
import TableContainer from '@material-ui/core/TableContainer';
import TableHead from '@material-ui/core/TableHead';
import TableRow from '@material-ui/core/TableRow';
import Paper from '@material-ui/core/Paper';
import stockData from '../util/stockData';
import { useDispatch } from 'react-redux';
import { getStocksOwned } from '../slices/stocksOwnedSlice';
const StockQuotes = ({ availableFunds, setAvailableFunds }) => {
const [sharesToBuy, setSharesToBuy] = useState(stockData);
return(
<TableContainer component={Paper}>
<Table className={classes.table} aria-label="customized table">
<TableHead>
<TableRow>
<StyledTableCell>Stock Name</StyledTableCell>
<StyledTableCell align="right">Current Price</StyledTableCell>
<StyledTableCell align="right">Shares</StyledTableCell>
<StyledTableCell align="right">Order</StyledTableCell>
</TableRow>
</TableHead>
<TableBody>
{sharesToBuy.map((stock, index) => (
<StyledTableRow key = {index} >
<StyledTableCell component="th" scope="row">
{stock.name}
</StyledTableCell>
<StyledTableCell align="right">${stock.price}</StyledTableCell>
<StyledTableCell align="right"><input type="number" value ={stock.owned} onChange={event => handleChange(event, index)}></input></StyledTableCell>
<StyledTableCell align="right">
<ThemeProvider theme={theme}>
<Button variant="contained" color="primary" className={classes.margin}
disabled={stock.owned === 0 || !stock.owned}
onClick={event => handleClick(event, index)}>
BUY
</Button>
</ThemeProvider>
</StyledTableCell>
</StyledTableRow>
))}
</TableBody>
</Table>
</TableContainer>
)
}
【问题讨论】:
-
我认为这通常是由于 some 包含输入的组件被重新安装,而不是重新渲染,因此失去焦点。您可以尝试创建一个 running condesandbox 来重现焦点问题吗?
-
好的,谢谢,这里是沙盒链接--> codesandbox.io/s/gallant-framework-88wc4?file=/src/App.js
标签: javascript reactjs