Во-первых, вам не рекомендуется привязывать функцию напрямую при рендеринге.Потому что, когда вы связываете функцию непосредственно при рендеринге, ваш компонент будет рендериться по многим причинам, например, setState, при получении новых реквизитов и т. Д. Каждый раз, когда он рендерится, он будет создавать новую функцию в сгенерированном файле пачки webpack, поэтому размер файла становится большим.поэтому всегда делайте привязку в конструкторе
Теперь по вашей проблеме.Сделайте карту в рендере напрямую и передайте onChange
в качестве реквизита компоненту LowRow.Вам нужно сделать что-то вроде ниже, чтобы передать функцию в качестве опоры и отправить ей параметры в дочернем компоненте и получить доступ к нему в родительском компоненте.Эта концепция называется callbacks in реагировать.
Еще одна вещь, которую никогда не следует забывать добавлять ключ к родительскому элементу jsx всякий раз, когда вы генерируете элементы jsx в цикле.Ключ должен быть уникальным идентификатором из данных.Если ваши данные не содержат уникальный идентификатор, передайте индекс в качестве ключа, например key = {"key" + index}
constructor(props){
super(props);
this.onChange = this.onChange.bind(this);
}
onChange(event, id) {
console.log("test", event, id);
}
render(){
const { lowData } = this.props;
return(
<div>
{this.props.lowData && this.props.lowData.Low.map(data => (
<LowRow key={data.id} technologies={this.state.technologies} onChange={this.onChange} data={data} key={data.id} />
))}
</div>
)
}
Выберите onChange
Здесь не уверенкакой идентификатор вы передаете.но вы можете передавать параметры, как, как я сделал в коде ниже
<select className="selectpicker btn btn-labeled btn-start selectId techDrop margin-left-10" onChange={e => props.onChange(e, id)}>
<option disabled selected value>None Selected</option>
{props.technologies && <Select techData={props.technologies} options={props.technologyName} />}
</select>