【发布时间】:2019-12-11 16:54:21
【问题描述】:
据我所知,在 JavaScript 中定义函数有三种方式。
1.声明
function handleEvent(e) {}
2。作业
var handleEvent = function(e) {}
3.箭头
var handleEvent = (e) => {}
我已经搜索了好几个小时,试图找到这些选项中的哪一个是在功能性 React 组件中声明处理程序的首选方式的信息。我发现的所有文章都在讨论类组件、绑定等。但是随着新的Hooks 出来,函数内部也必须有定义它们的标准。 (毕竟功能组件一直都存在。)
考虑以下组件,它声明了三个处理程序,它们是您在 React 组件中可能需要的不同行为的示例。
function NameForm(props) {
const [inputName, setInputName] = useState("");
useEffect(() => setInputName(props.initialValue), [props.initialValue]);
const handleInputChange = function(event) {
setInputName(event.target.value);
};
const resetForm = function() {
setInputName(props.initialValue);
props.onReset();
};
const handleFormSubmit = function(event) {
event.preventDefault();
props.onSubmit(inputName);
resetForm();
};
/* React-Bootstrap simple form example using these handlers. */
return (
<Form onSubmit={handleFormSubmit}>
<Form.Group controlId="NameForm">
<Form.Control
type="text"
placeholder="Enter your name here"
value={inputName}
onChange={handleInputChange}
/>
<Button type="submit">Submit</Button>
<Button onClick={resetForm}>Reset</Button>
</Form.Group>
</Form>
);
}
所有这些处理程序都直接作为回调传递给其他组件。它们可能会在任何时候被调用,但是在那一刻,我们需要访问props 的当前 值以及像inputName 这样的任何状态。此外,您可能已经注意到,handleFormSubmit 处理程序也调用了resetForm 处理程序。
从性能角度定义处理程序的推荐方法是什么?是否可以避免在每次渲染时重新定义它们?
useCallback 也适合这里的某个地方吗?
【问题讨论】:
-
您目前拥有的不是有效的 javascript。如果你初始化一个 const,你不能只定义一个函数而不先将 const 设置为等于某个值。
-
谢谢,打错字了。
标签: javascript reactjs function react-hooks nested-function