Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
266 views
in Technique[技术] by (71.8m points)

javascript - Passing parameters to event handler from a functional component without using inline syntax

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)} />
  }));
}
question from:https://stackoverflow.com/questions/65877521/passing-parameters-to-event-handler-from-a-functional-component-without-using-in

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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)} />
  }));
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...