I brought the code below for easy understanding. Note the location of the a function.
There are declarative differences depending on where the a function is in React.
Both are code that works correctly.
Are there any benefits of defining them within React components?
function a(init, sub_name, value) { let t2 = cloneDeep(init); t2[sub_name] = value; return t2; } export default function test(props) { const [obj, setobj] = useState({ first: { id: 123, v: 456 }, }); return ( <div> <Test onUpdateData={(v) => setobj((p) => a(p, "first", v))} /> </div> ); }
export default function test(props) { const [obj, setobj] = useState({ first: { id: 123, v: 456 }, }); function a(init, sub_name, value) { let t2 = cloneDeep(init); t2[sub_name] = value; return t2; } return ( <div> <Test onUpdateData={(v) => setobj((p) => a(p, "first", v))} /> </div> ); }
- This is a shortened code that makes it easy to understand the intent of the question.
Advertisement
Answer
In the first snippet you posted, the a
function is essentially a private function in that file. It is used by your export but it is not accessible to other scopes.
In the second snippet, you have used a closure to encapsulate the a
function, which is part of the exported function.