react-input-component
🚀 A better alternative to react built-in input components
Motivations
- Before use built-in react inputs, you may need to know what the hell are controlled and uncontrolled inputs
- Controlled input has a bug
- Controlled input is slow
- Uncontrolled input is not powerful
So I created this module to avoid the problems above.
Installation
yarn add react-input-component
Usages
Just like built-in input components, but no defaultValue
or defaultChecked
prop.
Example
;; <Input value="feel free to type here..." />
Components
- Input
- TextArea
- Select
Notes
- All styles are the same with react built-in inputs
- All react built-in inputs' props are supported, except
defaultValue
anddefaultChecked
- To get the DOM, use
findDOMNode(input)
orinput.dom
. (Thisinput
refs to anInput
instance, like<Input ref="input" />
) - Form data (value or checked) would be handled by the DOM itself.
- Form data could also be changed by passing new
value
prop to component.
Caveat
If the new value
prop is equal to the prev value
prop, form data would not be updated, even if form data is not equal to the value
prop.
;;; state = value: 'a' ; { value = 'b'; // Simulate user typing // Try to reset `value` to "a", but failed // Because the new `value` prop is equal to the prev `value` prop this; // => BAD } { return <Input ...thisstate />; } ;
To resolve this problem, you could change the DOM value directly, or add a special updateKey
prop.
updateKey
helps Input component to decide to update. If updateKey
changes, form data changes.
;;; state = value: 'a' ; { value = 'b'; // Simulate user typing // Try to reset `value` to "a" // Adding a new `updateKey` to force upate this; // => GOOD } { return <Input ...thisstate />; } ;
License
MIT © Cap32