1

I have following code where I need to pass index value to the event handler which I am getting as a prop from another component. How can I achieve this without using the inline syntax, as inline syntax is not considered as a good approach since it may lead to the creation of new function each time the component re-renders?

const Persons = (props) => {
  return (props.persons.map((person, index) => {
    return <Person
      click={() => props.click(index)}
      name={person.name}
      age={person.age}
      key={person.id}
      changed={(event) => props.changed(event, person.id)} />
  }));
}

1 Answer 1

1

The in-line anonymous function is fine in most cases, but if you want to not do that you can create a curried handler to attach.

const changeHandler = id => event => {...};
const clickHandler = index => () => {...};

This function consumes and encloses an id variable and returns a function that consumes an event object. This returned function is what elements/components will use as a callback.

Pass to component

<Persons click={clickHandler} change={changeHandler} />

And attach callback to handler

const Persons = (props) => {
  return (props.persons.map((person, index) => {
    return <Person
      click={props.click(index)}
      name={person.name}
      age={person.age}
      key={person.id}
      changed={props.changed(person.id)} />
  }));
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.