ES6 구문을 사용하여 온클릭 이벤트를 통해 전달 매개 변수 반응
ES6 구문을 사용하여 추가 파라미터를 onClick 이벤트에 전달하는 방법
예:
handleRemove = (e) => {
}
render() {
<button onClick={this.handleRemove}></button>
}
ID를 전달하고 싶다.handleRemove
다음과 같이 기능합니다.
<button onClick={this.handleRemove(id)}></button>
에서 그것을 기억하십시오.onClick={ ... }
,그...
는 JavaScript 표현입니다.그렇게
... onClick={this.handleRemove(id)}
와 같다
var val = this.handleRemove(id);
... onClick={val}
즉, 당신이 전화하는 전화는this.handleRemove(id)
즉시, 그리고 그 값을 전달한다.onClick
그건 네가 원하는 게 아니야
대신 인수 중 하나가 미리 채워져 있는 새로운 함수를 만듭니다.기본적으로 다음 중 하나가 필요합니다.
var newFn = function() {
var args = Array.prototype.slice.call(arguments);
// args[0] contains the event object
this.handleRemove.apply(this, [id].concat(args));
}
... onClick={newFn}
이를 ES5 JavaScript로 표현하는 방법이 있습니다.
... onClick={this.handleRemove.bind(this, id)}
사용하시는 경우React.createClass
, React는 자동으로 바인드됩니다.this
예를 들어, 당신이 그것을 변경하지 않는 한 불평할 수 있습니다.this.handleRemove.bind(null, id)
.
함수를 인라인으로 간단하게 정의할 수도 있습니다.환경 또는 트랜스필러가 지원하는 경우 화살표 함수를 사용하여 단축할 수 있습니다.
... onClick={() => this.handleRemove(id)}
이벤트에 액세스 할 필요가 있는 경우는, 다음과 같이 전달할 수 있습니다.
... onClick={(evt) => this.handleRemove(id, evt)}
버튼 요소의 값 속성을 사용하여 ID를 전달합니다.
<button onClick={this.handleRemove} value={id}>Remove</button>
그런 다음 handle Remove에서 이벤트의 값을 다음과 같이 읽습니다.
handleRemove(event) {
...
remove(event.target.value);
...
}
이렇게 하면 구성 요소가 다시 렌더링될 때마다 화살표 기능을 사용하는 것과 비교하여 새 기능이 생성되지 않습니다.
화살표 기능을 다음과 같이 사용합니다.
<button onClick={()=>{this.handleRemove(id)}}></button>
onClick={this.handleRemove.bind(this, id)}
화살표 기능과 함께 사용
onClick={()=>{this.handleRemove(id)}}
지금까지 아무도 언급하지 않은 것은 handle Remove에서 함수를 반환하도록 하는 것입니다.
다음과 같은 작업을 수행할 수 있습니다.
handleRemove = id => event => {
// Do stuff with id and event
}
// render...
return <button onClick={this.handleRemove(id)} />
그러나 이러한 솔루션에는 모두 각 렌더링에 새로운 기능이 생성된다는 단점이 있습니다.전달되는 버튼의 새 컴포넌트를 만드는 것이 좋습니다.id
및 그handleRemove
따로따로
TL;DR:
렌더 메서드 내에서 함수를 바인딩하지 마십시오(화살표 기능도 사용하지 않음).공식 권장 사항을 참조하십시오.
https://reactjs.org/docs/faq-functions.html
그래서, 받아들여지는 답변과 같은 점을 지적하는 몇 가지가 더 있습니다.그리고 또 다른 댓글들이 있는데bind
같은 이유로 화살표 기능을 사용하지 않아도 됩니다(각 렌더링에 대해 여러 번 반복해서 작성됩니다).하지만 예가 없어서 하나 씁니다.
기본적으로 컨스트럭터에서 함수를 바인딩해야 합니다.
class Actions extends Component {
static propTypes = {
entity_id: PropTypes.number,
contact_id: PropTypes.number,
onReplace: PropTypes.func.isRequired,
onTransfer: PropTypes.func.isRequired
}
constructor() {
super();
this.onReplace = this.onReplace.bind(this);
this.onTransfer = this.onTransfer.bind(this);
}
onReplace() {
this.props.onReplace(this.props.entity_id, this.props.contact_id);
}
onTransfer() {
this.props.onTransfer(this.props.entity_id, this.props.contact_id);
}
render() {
return (
<div className="actions">
<button className="btn btn-circle btn-icon-only btn-default"
onClick={this.onReplace}
title="Replace">
<i className="fa fa-refresh"></i>
</button>
<button className="btn btn-circle btn-icon-only btn-default"
onClick={this.onTransfer}
title="Transfer">
<i className="fa fa-share"></i>
</button>
</div>
)
}
}
export default Actions
주요 항목은 다음과 같습니다.
컨스트럭터
this.onReplace = this.onReplace.bind(this);
방법
onReplace() {
this.props.onReplace(this.props.entity_id, this.props.contact_id);
}
표현하다
onClick={this.onReplace}
기능 컴포넌트에서 이 기능은 훌륭하게 작동합니다. 2020년 이후 React 사용자가 새로 추가되었습니다. :)
handleRemove = (e, id) => {
//removeById(id);
}
return(<button onClick={(e)=> handleRemove(e, id)}></button> )
다음 코드를 사용합니다.
<Button onClick={this.onSubmit} id={item.key} value={shop.ethereum}>
Approve
</Button>
다음으로 메서드 내부를 나타냅니다.
onSubmit = async event => {
event.preventDefault();
event.persist();
console.log("Param passed => Eth addrs: ", event.target.value)
console.log("Param passed => id: ", event.target.id)
...
}
그 결과:
이벤트 => Eth 주소: 0x4D86c35fdC080Ce449E89C6에서 전달된 파라미터BC058E6cc4a4D49A6
이벤트 => ID: Mlz4OTBSwcgPLBZ7에서 매개 변수가 전달되었습니다.BQbwVjGip1
리액트 부트스트랩을 사용하고 있습니다.드롭다운에 대한 onSelect 트리거로 인해 데이터 전달이 허용되지 않았습니다.그냥 이벤트.따라서 임의의 값을 속성으로 설정하고 javascript를 사용하여 함수에서 픽업할 수 있습니다.이벤트 타겟에서 설정한 속성을 선택합니다.
let currentTarget = event.target;
let currentId = currentTarget.getAttribute('data-id');
let currentValue = currentTarget.getAttribute('data-value');
언급URL : https://stackoverflow.com/questions/34350988/react-passing-parameter-via-onclick-event-using-es6-syntax
'itsource' 카테고리의 다른 글
WooCommerce:아이템이 이미 카트에 있는지 확인합니다. (0) | 2023.03.13 |
---|---|
추적: 노드 유형 SpreadProperty의 이름이 Object.isSpreadProperty에서 SpreadElement로 변경되었습니다. (0) | 2023.03.08 |
스프링 부트가 logging.path 변수를 수신하지 않는 이유는 무엇입니까? (0) | 2023.03.08 |
AngularJS ng-class if-else 식 (0) | 2023.03.08 |
각을 조합하는 가장 좋은 방법JS 및 트위터 부트스트랩 (0) | 2023.03.08 |