react-dynamic-input allows you to create multiple inputs that each have their own unique state that you define. It also comes with a built in onSubmit button which takes a function that you ceate. Add it to a form or whatever user input you need!

This is a little bit complicated, as you'll need another repo to test your changes on. We'll refer to this as otherRepo.
- Clone react-dynamic-input
- Change directories into react-dynamic-input -->
cd react-dynamic-input - Install all dependencies -->
npm i - Create a build -->
npm run-script build - Allow this local repo to be used as a dependency -->
npm link - Navigate to
otherRepo-->cd {to otherRepo} - Add a dependency in
package.jsonpointing to the root ofreact-dynamic-input-->"react-dynamic-input": "file:/{PATH}/react-dynamic-input" - Install the local package -->
npm i npm run startfromotherRepo- Thanks for contributing!
npm i react-dynamic-inputAdd
DynamicInputto your components like this:
importDynamicInputfrom"react-dynamic-input"classYourComponentextendsReact.Component{render(){return<DynamicInput/>}}props for the <DynamicInput/>:
| Name | Required | Default | Type | Description |
|---|---|---|---|---|
inputName | yes | string | The key you would like to be assigned to the state of each of the inputs that are created [{ [inputName]: ""}] | |
addButtonText | no | "Add Input" | string | The text you would like to appear on the button to create another input |
setInput | yes | Function | The setState function you would like to be executed when a user types into the input (setState, or useState) | |
input | yes | [] | Array | The state you will pass to the component. Must be the shape of [{ [inputName]: ""}] |
onSubmit | no | Function | The onSubmit function you would like to execute when a user submits the form. If nothing is provided there will be no button and you can add your own. | |
submitButtonText | no | "Submit" | string | The text you would like to appear on the submit button |
addPosition | no | "top" | string | The position you would like the "Add Input" button to be. "top" will make it above the inputs, "bottom" will place it below and next to the submit button |
type | no | "text" | string | The type of input you would like to use |
removeText | no | "Remove" | string | The text you would like to have in the remove input button |
placeholderNumbered | no | false | boolean | If you would like the placeholder text to have a number after the text, set this to true |
toolTip | no | false | boolean | You can have a tooltip pop up when you scroll your mouse over the add button |
toolTipText | no | string | The text you would like to appear in the tooltip above the add button | |
label | no | "" | string | If you would like a label for the inputs you can put the text here (will appear as an <h4></h4 element above the inputs) |
inputStyle | no | {} | React.CSSProperties | Additional input styles |
addButtonStyle | no | {} | React.CSSProperties | Additional add button styles |
removeButtonStyle | no | {} | React.CSSProperties | Additional remove button styles |
submitButtonStyle | no | {} | React.CSSProperties | Additonal submit button styles |
importReact,{useState}from"react"importDynamicInputfrom"react-dynamic-input"constApp=()=>{const[input,setInput]=useState([{name: ""}])constshowState=()=>{alert(input.map(item=>item.name))}return(<div><DynamicInputinputName="name"addButtonText="Add Another Input"setInput={setInput}input={input}onSubmit={showState}submitButtonText="Submit"addPosition="bottom"type="text"placeholderNumbered={true}toolTip={true}toolTipText="Add another input"label="My Input"/>{input.map((item,index)=>(<pkey={(index+1)*2}>{item.name}</p>))}</div>)}exportdefaultAppEach of the Elements in the react-dynamic-input Component can be targeted througn CSS with a className attribute (the entire component can be targeted with an id):
- Enitre Component:
#DynamicInput {
/* Add whatever CSS you'd like! */
}- Add Button:
.addButton {
/* Add whatever CSS you'd like! */
}- Remove Button:
.removeButton {
/* Add whatever CSS you'd like! */
}- Submit Button:
.submitButton {
/* Add whatever CSS you'd like! */
}- Input:
.dynamicInput {
/* Add whatever CSS you'd like! */
}- Label:
.dynamicLabel {
/* Add whatever CSS you'd like! */
}- Tool Tip:
.dynamicTooltip {
/* Add whatever CSS you'd like! */
}
.dynamicTooltipText {
/* Add whatever CSS you'd like! */
}I am open to ideas and improvments! If you have a feature or bug fix open a PR or submit an issue! Thank you! 🛰
- Changed over to TypeScript to give users better error messages
- Create a button that will add another input
- Give each of the inputs its own value
- Add a remove button that will take away the desired input
- Pass a onSubmit function to component (mauybe just leave this to the user??)
- Make a reusable component that can accept props
- Create GIF of working component
- Add basic styling for inputs (Styled Components??)
- Publish to NPM
- (Possible) Add a submit button for eact of the inputs individually to only submit one thing
