请问用react怎么输入数量和单价后总价就会计算出来

图片描述

                <td>
                    <input type="text"
                           name="num"
                           placeholder="数量"
                           defaultValue={$.readProp(om, 'num')}
                           onChange={foo.bind(null, i)}/>
                </td>
                <td>
                    <input type="text"
                           name="price"
                           placeholder="单价"
                           defaultValue={$.readProp(om, 'price')}
                           onChange={foo.bind(null, i)}/>
                </td>
                <td>
                     <input type="text"
                       name="totalPrice"
                       placeholder="总价"
                       defaultValue={$.readProp(om, 'totalPrice')}
                       onChange={foo.bind(null, i)}/>
                </td>
阅读 4.9k
3 个回答

看也知道你的代码并非React领域了...jQuery的钱符号($)都出现了。

所以乾脆用refs,让存取DOM更直接,范例1:

class Calculator extends React.Component {

  handleOnChang = () => {
    this.textInputTotalPrice.value =
      (+this.textInputNum.value) * (+this.textInputPrice.value)
  }

  render() {
    return (
      <table>
        <tbody>
          <tr>
            <td>
                <input
                  type="text"
                  name="num"
                  placeholder="数量"
                  defaultValue={0}
                  ref={(input) => { this.textInputNum = input }}
                  onChange={this.handleOnChange}
                />
            </td>
            <td>
                <input
                  type="text"
                  name="price"
                  placeholder="单价"
                  defaultValue={0}
                  ref={(input) => { this.textInputPrice = input }}
                  onChange={this.handleOnChange}
                />
            </td>
            <td>
                 <input
                   type="text"
                   name="totalPrice"
                   placeholder="总价"
                   defaultValue={0}
                   ref={(input) => { this.textInputTotalPrice = input }}
                 />
            </td>
          </tr>
        </tbody>
      </table>
    )
  }
}

不过这样失去了使用React的大部份意义,所以应该要用React的state(状态)来作值的运算才是,范例2:

class Calculator extends React.Component {
  constructor() {
    super()

    // 初始值
    this.state = {
      num: 0,
      price: 0,
      totalPrice: 0,
    }
  }


  handleOnChange = (e) => {
    // 先取得目前的state中的记录值
    let { num, price, totalPrice } = this.state

    // 用name来区分不同的文字框输入
    if (e.target.getAttribute('name') === 'num') {
      num = e.target.value
    } else {
      price = e.target.value
    }

    // 加总
    totalPrice = (+num) * (+price)

    // 改变state值,文字框会随著更动
    this.setState({
      num,
      price,
      totalPrice,
    })
  }

  render() {
    return (
      <table>
        <tbody>
          <tr>
            <td>
                <input
                  type="text"
                  name="num"
                  placeholder="数量"
                  value={this.state.num}
                  onChange={this.handleOnChange}
                />
            </td>
            <td>
                <input
                  type="text"
                  name="price"
                  placeholder="单价"
                  value={this.state.price}
                  onChange={this.handleOnChange}
                />
            </td>
            <td>
                 <input
                   type="text"
                   name="totalPrice"
                   placeholder="总价"
                   value={this.state.totalPrice}
                   disabled
                 />
            </td>
          </tr>
        </tbody>
      </table>
    )
  }
}

快快的写了一下,有试过应该是可以用的。

  onchange1(e){
    this.setState({input1: e.target.value});
    this.setState({input3: parseInt(this.state.input2) + parseInt(e.target.value)});
  },
  onchange2(e){
    this.setState({input2: e.target.value});
    this.setState({input3: parseInt(this.state.input1)  + parseInt(e.target.value) });
  },
  <input value={this.state.input1} onChange={this.onchange1} />
  <input value={this.state.input2} onChange={this.onchange2} />
  <input value={this.state.input3}/>

就是在你需要出现结果的那个阶段内,一只setState就可以了啊。
如果你想输入折扣的时候出现结果的话,就在折扣的onChange方法中先检测前面几个是否有值,然后在setState就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题