考虑这个简单的React文本框组件:
```jsx ```
其中,`label`是标签名,`value`是文本框中的值,`onChange`是当文本框的值发生变化时触发的回调函数。
```jsx ```
其中,`label`是标签名,`value`是文本框中的值,`onChange`是当文本框的值发生变化时触发的回调函数。
import React, { useState } from "react";
import { TextField, Grid } from "@mui/material";
const handleEnter = (event) => {
console.log("In handleEnter");
if (event.key == "Enter" && event.shiftKey) {
console.log("Detected Shift+Enter key");
} else if (event.key == "Enter") {
console.log("Detected Enter key");
}
};
export default function Example() {
const [value, setValue] = React.useState("");
const handleChatBoxChange = (event) => {
setValue(event.target.value);
};
return (
<Grid container>
<TextField
id='chatBox'
maxRows={90}
onKeyDown={handleEnter}
value={value}
onChange={handleChatBoxChange}
variant='filled'
></TextField>
</Grid>
);
}
这是一个非常简单的组件,使用handleEnter来检测用户按下Enter或Shift+Enter组合键。我意识到,handleEnter的实现可以写在函数Example()之外,也可以写在Example()内部。但是,handleChatBoxChange()不能置于外部,因为它依赖于通过useState()创建的setValue(而useState()必须在函数组件中使用)。那么如何最好地实践呢?
React.memo
API 的作用)——但是,如果不使用它,则使用React.memo
创建的子组件始终会重新渲染,因为函数 prop 值会发生变化。 - jsejcksn