javascript - 无法更改 react 控制输入的值

标签 javascript reactjs virtual-dom

当我在浏览器中输入时,我试图更改 react 控制输入的值。

我提供了一个代码示例。

如果前两个输入有值,则第三个输入将自动填充。但如果它们是空的,我如何允许用户直接输入第三个字段的值?

const PriceListRow = React.createClass({
    getInitialState(){
        return {
            flatPrice: "",
        }
    },
    setFlatPrice(a, b){
        "use strict";
        let self = this,
            prod = a * b;

        if ( !(_.isNumber(prod)) )
            self.setState({flatPrice: ""});
        else
            self.setState({flatPrice: prod});
       
    },
   render(){
       let self = this;
       return <div>
               <input type="number" name={"unitSize"} placeholder="1000 Sq. Ft." id={"unitSize"}
                      onBlur={ ()=> { self.setFlatPrice($("#bsp").val(), $("#unitSize").val()); }}
               />
               <input type="number"
                      name={"bsp"}
                      placeholder="4500" id={"bsp"}
                      onBlur={ ()=> { self.setFlatPrice($("#bsp").val(), $("#unitSize").val()); }}
               />
               <input type="text" name={"flatPrice"} placeholder="Size * BSP" id={"flatPrice"} value={self.state.flatPrice} />
       </div>
   }
});

最佳答案

如果我理解正确的话。您希望用户编辑 flatPrice,即使它是由上述 2 个输入 值自动设置的。

注意:完全删除了 jQuery 依赖项

下面的代码片段将满足您的需求。

const PriceListRow = React.createClass({
    getInitialState(){
        return {
            flatPrice: "",
            unitSize: 0,
            bsp: 0
        }
    },
    onUnitSizeChange(e){
      this.setState({unitSize: e.target.value});
    },
    onBSPChange(e){
      this.setState({bsp: e.target.value});
    },
    onFlatPriceChange(e){
      this.setState({flatPrice: e.target.value});
    },
    setFlatPrice(){
        let prod = this.state.unitSize * this.state.bsp;
        this.setState({flatPrice: isNaN(prod) ? "" : prod});
    },
   render(){
       return <div>
               <input 
       type="number"
       name={"unitSize"}
       placeholder="1000 Sq. Ft."
       id={"unitSize"}
       value={this.state.unitSize}
       onChange={this.onUnitSizeChange}
       onBlur={this.setFlatPrice}
               />
               <input type="number"
                      name={"bsp"}
                      value={this.state.bsp}
                      placeholder="4500" id={"bsp"}
                      onChange={this.onBSPChange}
                      onBlur={this.setFlatPrice}
               />
               <input type="text"
               name="flatPrice"
               placeholder="Size * BSP"
               id={"flatPrice"}
               onChange={this.onFlatPriceChange}
               value={this.state.flatPrice}
               />
       </div>
   }
});

ReactDOM.render(<PriceListRow />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

关于javascript - 无法更改 react 控制输入的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339866/

相关文章:

javascript - 如何在不使用 angular.copy 的情况下通过 $http 接收到服务数据时立即显示?

javascript - 在 jQuery MultiFile 插件中动态创建输入文件元素

node.js - Webpack 和 Babel : Server Side rendering of React Component "Unexpected token ' <'"

javascript - 根据location.hash传递的数据重新渲染ReactJS嵌套子组件

javascript - 在初始化 ReactJS 应用程序之前是否有必要等待窗口加载事件?

javascript - 从 HTML 获取数据到 Javascript (jQuery)

javascript - 没有找到组件工厂......打开模态

reactjs - 使用 slatejs 在编辑器中的光标处插入图像

javascript - SvelteJS与ReactJS渲染差异(重绘/重排)

javascript - React Virtual DOM 如何与第三方 js 插件配合使用?