javascript - 该函数有多个参数。但是,不要传递所有参数

标签 javascript reactjs

从选择中,我选择值已完成未完成进行中。在 handleStatus 函数中,我调用 getDetail 函数并向其传递值 status = e.target.value。但是,在 console.log (status) 中的 getDetail 函数返回我undefined

此处代码:https://stackblitz.com/edit/react-kk4yv8

import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';

class App extends Component {

  constructor (props) {
    super(props);
    this.state = {
      items: [],
      status: ''
    }
  }

    handleStatus = (e) => {
        this.setState({
                status: e.target.value
        })

        this.getDetail(status = e.target.value)
    }

    getDetail = (query, status) => {
        console.log(status)
    }

  render () {
    return (
      <div>
        <select
            value={this.state.status}
            onChange={(e) => this.handleStatus(e)}
        >
            <option value="completed">completed</option>
            <option value="uncompleted">uncompleted</option>
            <option value="inprogress">inprogress</option>
        </select>   
      </div>
    )
  }
}

render(<App />, document.getElementById('root'));

最佳答案

this.getDetail(status = e.target.value)

javascript 没有命名参数。此代码的意思是“将 e.target.value 分配给变量 status,然后将其作为第一个参数传递。在 getDetail 内部,第一个参数被分配给本地变量query。没有传入第二个参数,所以在getDetail中,第二个参数是未定义的。第二个参数可能在本地被称为status,但这无关函数之外发生的事情。

如果你想传入e.target.value作为状态,你需要把它作为第二个参数:

this.getDetail(undefined, e.target.value);

出于这个原因,通常将可选变量放在参数列表的末尾,这样您就可以简单地省略它们,而不是填充显式的未定义。

如果要传入大量参数,另一种选择是使用单个参数,即一个对象。函数内的代码可以检查该对象上是否存在属性,调用该函数的代码可以随意省略或包含该对象的属性。例如:

const example = (options) {
  if (options.status) {
    // whatever
  }
  if (options.query) {
    // whatever
  }
}

// To be used like:

example({ query: 'foo', status: 'complete' });
example({ status: 'incomplete' });
example({ query: 'bar' });

关于javascript - 该函数有多个参数。但是,不要传递所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341399/

相关文章:

javascript - 如何确定 JavaScript 中元素中的点击位置?

reactjs - 如何声明Set()类型的状态变量?

javascript - Jest : test components with ESM dependencies

javascript - 为 React 函数组件创建一个新的 MobX store 实例

ruby-on-rails - 响应前端以明文发送 https

javascript - react 路由器 : Active Link not matching the URL

javascript - 在 JavaScript 中初始化另一个函数内的函数

javascript - 是否可以从不支持 CORS 的不同域将图像导入 Canvas

javascript - 如何在打开另一个 div 时切换关闭所有 div

django - 预检请求不允许重定向