#javascript #reactjs #material-ui
#javascript #reactjs #материал-пользовательский интерфейс
Вопрос:
Я показываю несколько деталей в карточке пользовательского интерфейса материала и нажимаю кнопку «Редактировать». При нажатии кнопки редактирования мне нужно обновить содержимое карты в том же макете карты. Вот код
<Card className={classes.root} variant="outlined">
<CardContent>
<Typography
className={classes.title}
color="textSecondary"
gutterBottom
>
Word of the Day
</Typography>
<Typography>Name: 'RAAM'</Typography>
<Typography>Blood group: 'AB '</Typography>
<Typography>"Patient Ram is having bloodgroup AB "</Typography>
</CardContent>
<CardActions>
<Button size="small" onClick={click}>
Edit
</Button>
</CardActions>
</Card>
CodeSandbox
Как заставить функциональность редактирования работать?
Комментарии:
1. Разве вам не нужно использовать
state
?2. @GyuHyeonChoi Да, состояние есть, как только получите представление о том, как заставить функциональность обновления работать, можно довольно легко обновить состояние, поэтому смоделируйте локальные данные
3. Какой должна быть механика этой кнопки редактирования: должна ли она открывать модальную? Или включить редактирование полей типографики?
4. @tomrlh Сделать редактируемыми поля типографики — это то, что я пытаюсь получить.
Ответ №1:
const [editing, setEditing] = useState(false);
return (
<Card className={classes.root} variant="outlined">
<CardContent>
{ editing ? (
<textarea>
editing
</textarea>
) : (
<div>
<Typography
className={classes.title}
color="textSecondary"
gutterBottom
>
Word of the Day
</Typography>
<Typography>Name: 'RAAM'</Typography>
<Typography>Blood group: 'AB '</Typography>
<Typography>"Patient Ram is having bloodgroup AB "</Typography>
</div>
)}
</CardContent>
<CardActions>
<Button size="small" onClick={() => setEditing(true)}>
Edit
</Button>
</CardActions>
</Card>
);
Однако вы можете предоставить редактируемый вид одного и того же макета таким образом, в зависимости от editing
состояния.
Ответ №2:
Я думаю, что лучше использовать поля ввода вместо компонентов типографии. Я привел здесь пример. Когда вы нажимаете «Редактировать», поля ввода доступны для редактирования, а когда он теряет фокус, он блокируется для редактирования:
// all imports here
const useStyles = makeStyles({
[...]
});
export default function OutlinedCard() {
const [isEditable, setIsEditable] = useState(false);
const [name, setName] = useState("");
const classes = useStyles();
const handleEdit = () => {
console.log("I am here");
setIsEditable(!isEditable);
};
return (
<Card className={classes.root} variant="outlined">
<CardContent>
<Typography
className={classes.title}
color="textSecondary"
gutterBottom
>
Word of the Day
</Typography>
<TextField
id="standard-basic"
label="Name:"
disabled={!isEditable}
value={name}
onChange={(e) => setName(e.target.value)}
onBlur={() => setIsEditable(false)}
/>
</CardContent>
<CardActions>
<Button size="small" onClick={handleEdit}>
Edit
</Button>
</CardActions>
</Card>
);
}