Comments (6)
All these forms for onChange should be supported:
onChange(e)
onChange(e, value)
onChange(value)
from react-use-form-state.
Does this work? (Adopted from the readme's advanced input section). The text/textarea/select/etc functions the hook gives are basically just spreading an object into the component with all of the things (value, id, etc) the input needs. So if everything's named "correctly" it should JustWork™.
<DatePicker
{...text({
onChange: date => doTheThing(date) /* or (e, value) => {...}, or... */,
onBlur: () => {} /* Dunno if you'd need to "no op" this */ ,
})}
/>
Here's a list of the props DatePicker takes, if they're not called the same you might have to wrap the text
function and remap some of the property names?
Remapping should be as simple as defining a mapProps
function that looks like:
function mapProps({prop1, prop2 /* (and so on) */ }) {
return { newName1: prop1, newName2: prop2, ... } // and so on
}
and then using it like <input {...mapProps(text(...))}
.
from react-use-form-state.
No it doesn't. As I said, the problem is that useFormState's handler tries to get the value from e.target.value
while in this example e
is undefined. And the onChange handler for helpers like text()
is not overriding the default onChange behavior, it's just there to help us do side effects.
from react-use-form-state.
Ahh, I see now. Sorry for misreading. I thought the onChange was for overriding it, but looking at the source I can see where I missed that. It seems to me that having the onX
handlers override things would be the most intuitive approach. But the default handler looks quite tightly coupled to the internal mechanisms of the hook... I don't see an immediately obvious fix for that, unfortunately.
from react-use-form-state.
I was looking at this exact problem, too (although in my case, the library is react-select
).
It seems like one solution to this would be to do add some handlers for "raw" types. Something along the lines of:
export default function SignUpForm() {
const [formState, { text, raw }] = useFormState();
return (
<form onSubmit={() => console.log(formState)}>
<input {...text('name')} />
<DatePicker {...raw('date')} />
</form>
);
}
So raw()
would return, to use some typescript annotation, a:
interface Raw<T> {
onChange(value: T): void;
value: T;
onBlur(): void;
}
?
from react-use-form-state.
Or,
export default function SignUpForm() {
const [formState, { text, raw }] = useFormState();
return (
<form onSubmit={() => console.log(formState)}>
<input {...text('name')} />
<DatePicker {...date('date', {raw: true})} />
</form>
);
}
Although this doesn't work as nicely for this example, since DatePicker
gives us an actual Date
, not a string.
from react-use-form-state.
Related Issues (20)
- Nested objects support HOT 1
- validate that fields match HOT 1
- Async validation HOT 2
- setField should not be packaged with formState HOT 2
- Published version of types lacking pristine/isPristine? HOT 2
- BUG: `validate` function is called on blur when `validateOnBlur` is not specified/false HOT 2
- react update - Cannot update a component from inside the function body of a different component. HOT 10
- Auto-saving forms HOT 1
- Reference Nested Values with Name HOT 1
- Question: how would one handle "dynamically added fields" ? HOT 2
- isPristine feature is not present in dist package HOT 5
- Password confirmation use case questions HOT 2
- Raw inputs are not given a `name` prop HOT 1
- Question - trigger validation on submit HOT 1
- Request: reset current values to initial values HOT 1
- Function to reset pristine HOT 2
- Request: Input type "number" with BaseInputProps - value is "number" type
- Maintained? HOT 4
- Unable to install with react's latest version react ^17.0.2 HOT 1
- React warning: Cannot update a component while rendering a different component when using `...text` in child component
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from react-use-form-state.