Giter Club home page Giter Club logo

Comments (6)

KaRkY avatar KaRkY commented on May 29, 2024

All these forms for onChange should be supported:
onChange(e)
onChange(e, value)
onChange(value)

from react-use-form-state.

hazelweakly avatar hazelweakly commented on May 29, 2024

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.

poeti8 avatar poeti8 commented on May 29, 2024

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.

hazelweakly avatar hazelweakly commented on May 29, 2024

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.

jwalton avatar jwalton commented on May 29, 2024

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.

jwalton avatar jwalton commented on May 29, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.