Javascript 试图将变量传递到函数外部

Javascript 试图将变量传递到函数外部,javascript,reactjs,react-router,jsx,Javascript,Reactjs,React Router,Jsx,我想将索引变量从映射传递到事件更改函数。 代码如下: {this.data && this.data.map((item, index) => ( <tr className="table-info" key={index}> <td>{index}</td> <td>{item.namaPengirim}</td> <td>{item

我想将索引变量从映射传递到事件更改函数。 代码如下:

{this.data &&
  this.data.map((item, index) => (
    <tr className="table-info" key={index}>
      <td>{index}</td>
      <td>{item.namaPengirim}</td>
      <td>{item.namaPenerima}</td>
      <td>{item.jenisPengiriman}</td>
      <td>{item.berat}</td>
      <td>{item.volume}</td>
      <td>{item.Harga}</td>
      <td>
        <select
          onChange={(key, event) => {
            this.props.onProsesChange(key, event, index);
          }}
          value={this.props.proses}
          className="form-control"
        >
          <option></option>
          <option value="Delivered">Delivered </option>
          <option value="On Process">On Process</option>
        </select>
      </td>
    </tr>
  ))}
问题 函数签名与调用它的方式不匹配

onProsesChange(event, index) {
  let data = JSON.parse(localStorage.getItem("proses"));
  console.log(data);
  console.log(this.state.proses);
  console.log(index);
  if (data && data[index]) {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: data });
    localStorage.setItem("proses", JSON.stringify(data));
  } else {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: [event.target.value] });
    localStorage.setItem("proses", JSON.stringify([data]));
  }
}

...

onChange={(key, event) => {
  this.props.onProsesChange(key, event, index);
}}
调用时传递
事件
对象,最后传递
索引

解决方案1 同时使用

onProsesChange(key, event, index) {
  let data = JSON.parse(localStorage.getItem("proses"));
  console.log(data);
  console.log(this.state.proses);
  console.log(index);
  if (data && data[index]) {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: data });
    localStorage.setItem("proses", JSON.stringify(data));
  } else {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: [event.target.value] });
    localStorage.setItem("proses", JSON.stringify([data]));
  }
}
onChange={(key, event) => {
  this.props.onProsesChange(event, index);
}}
解决方案#2 通过不传递
键来匹配签名

onProsesChange(key, event, index) {
  let data = JSON.parse(localStorage.getItem("proses"));
  console.log(data);
  console.log(this.state.proses);
  console.log(index);
  if (data && data[index]) {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: data });
    localStorage.setItem("proses", JSON.stringify(data));
  } else {
    data[index] = event.target.value;
    this.setState({ ...this.state, proses: [event.target.value] });
    localStorage.setItem("proses", JSON.stringify([data]));
  }
}
onChange={(key, event) => {
  this.props.onProsesChange(event, index);
}}

范围仅深入/内部而非外部。如果你想要外部的东西,在外部声明一个变量,在内部赋值。这是什么意思?抱歉,我不太明白
索引
在(整个array.map回调的)范围内,所以这里看起来没问题。你能在问题中加入
onprosechange
吗?你的控制台日志记录在哪里?什么是
onprosechange
?我在帖子中添加了onprosechange。