Skip to content

Instantly share code, notes, and snippets.

@stemount
Last active October 31, 2020 17:17
Show Gist options
  • Save stemount/b6cf4e44c5659939c4320e1286884d60 to your computer and use it in GitHub Desktop.
Save stemount/b6cf4e44c5659939c4320e1286884d60 to your computer and use it in GitHub Desktop.
React useCallback does not work with submit handler with an empty value.
diff --git a/ReactUseCallbackBefore.js b/ReactUseCallbackFixors.js
index 27931c8..dd6eace 100644
--- a/ReactUseCallbackBefore.js
+++ b/ReactUseCallbackFixors.js
@@ -1,18 +1,18 @@
const App = () => {
- const [ title, setTitle ] = React.useState('');
+ const [ title, setTitle ] = React.useState(``);
const handleSubmit = React.useCallback((event) => {
event.preventDefault();
- console.log(title);
- alert(`the value of title is ${title}`);
- }, []);
+ console.log("getTitle", title);
+ alert(`the value of title is ${title}`);
+ }, [title]);
const handleTitleChange = React.useCallback(
(event) => {
- console.log(event.target.value)
+ console.log("formValueChange", event.target.value)
setTitle(event.target.value);
},
- [],
+ [title],
);
return (
const App = () => {
const [ title, setTitle ] = React.useState('');
const handleSubmit = React.useCallback((event) => {
event.preventDefault();
console.log(title);
alert(`the value of title is ${title}`);
}, []);
const handleTitleChange = React.useCallback(
(event) => {
console.log(event.target.value)
setTitle(event.target.value);
},
[],
);
return (
<div>
<form onSubmit={handleSubmit}>
Input:
<input type="text" name="title" value={title} onChange={handleTitleChange}/>
<br/>
<button type="submit"> Submit </button>
</form>
<p>Output: {title}</p>
</div>
)
}
ReactDOM.render(<App/>, document.getElementById('root'));
const App = () => {
const [ title, setTitle ] = React.useState(``);
const handleSubmit = React.useCallback((event) => {
event.preventDefault();
console.log("getTitle", title);
alert(`the value of title is ${title}`);
}, [title]);
const handleTitleChange = React.useCallback(
(event) => {
console.log("formValueChange", event.target.value)
setTitle(event.target.value);
},
[title],
);
return (
<div>
<form onSubmit={handleSubmit}>
Input:
<input type="text" name="title" value={title} onChange={handleTitleChange}/>
<br/>
<button type="submit"> Submit </button>
</form>
<p>Output: {title}</p>
</div>
)
}
ReactDOM.render(<App/>, document.getElementById('root'));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment