Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding dynamic <option> to select doesn't show unless I switch the field

I want to be able to add Group Members dynamically and I simply used + button for that. The problem is - it adds the input value of the prompt, but I can't see it unless I switch fields and type something else. Here is the YouTube link for better understanding: https://youtu.be/sA0WB2Le3Fg

<button id="add" type="button" onClick={(e)=>this.addMember(e)}>+</button>

The state :

 members: [
        {member:"Berin"},
        {member:"Cristian"},
        {member:"Raddy"},
        {member:"Ventsislav"},
      ]

The function :

  addMember = (e) => {
    let input = prompt("Enter the name");
    this.state.members.push({member:input});
    e.preventDefault();
  }

The mapping function :

let members = this.state.members.map((member,index)=>{
          return <option value={member.member} key={index}>{member.member}</option>
        })

The select field :

<select id="groupMember" onChange={this.changeMember} name="member" required>
  <option defaultValue="" selected disabled>Select group member</option>
 {members}
</select>
like image 576
Berin Aptula Avatar asked Dec 04 '25 00:12

Berin Aptula


2 Answers

Try this:

  addMember = (e) => {
    let input = prompt("Enter the name");
    let newMemberList = this.state.members;
    newMemberList.push(input);
    this.setState({ members: newMemberList });
    e.preventDefault();
  }
like image 62
Marc M. Avatar answered Dec 05 '25 13:12

Marc M.


Recommended approach in the later React versions looks like this:

addMember = (e) => {
    let input = prompt("Enter the name");
    this.setState(prevState => ({
        members: [...prevState.members, input]
    }))
    e.preventDefault();
}
like image 45
Ivalo Pajumets Avatar answered Dec 05 '25 12:12

Ivalo Pajumets



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!