javascript - React 渲染相同的元素,它是动态组件

标签 javascript reactjs

我不知道怎么称呼这种情况。正在跟进

我有一个渲染一个动态组件

<input type="text" placeholder={this.props.reduxStateValue} />

function dynamicInput() {
    var page = this.props.kindOfPage,
        rState = this.props.reduxState;
    if (page === 'foo') {
        // foo input
        // eg. rState.value === 10
        return <input type="text" placeholder={rState.value} 
                      onChange={this.handleFoo} />
    } else {
        // bar input
        // eg. rState.value === 20
        return <input type="text" placeholder={rState.value} 
                      onChange={this.handleBar} />
    }
}

上面的例子是非常简单的verion。每个组件都有许多不同的东西 this.props.kindOfPage .

问题是当 page === 'foo'然后我插入 100进入<input/>并切换到 page !== foo , 100<input/>page !== foo .

即 如果我调用 <input/>page === 'foo'案例为 foo input另一个是bar input ,

  1. 插入 100进入foo input
  2. 将页面切换到page !== foo然后bar input呈现
  3. 100bar input

但是每一个的真正值(value)<input>有自己的值(value)。 即

  1. foo input :

值:100 , 占位符:10 , 显示值:100

  1. bar input :

值:'' , 占位符:20 , 显示值:100

我想做的是 bar input显示其占位符 20因为 我们没有在 bar input 中插入值 100 .

我认为这个问题是因为 React 的 VirtualDOM 引起的。当每个元素之间存在差异时,渲染器只会更改其 DOM。因此,每当我更改属性时,元素都不会更改并且 valueinput元素也没有改变。

但是,我想将两者分开并显示不同的值。有什么想法吗?

最佳答案

也许您可以通过将动态事件绑定(bind)与组件的渲染方法解耦来处理 React 渲染和 DOM 差异的这一特性,从而稍微不同地解决这个问题。

与其像现在这样使用不同的事件处理程序有条件地渲染组件,不如选择更高效的渲染实现(即没有条件分支),方法是使用一个基于您的 动态调用适当事件的通用事件处理程序kindOfPage 状态?

例如,您可以遵循以下模式(伪代码):

function handleGeneric(event) {

    var page = this.props.kindOfPage;

    // Introduce dynamic branching in "generic" event handler, like so
    switch(page) {
      case 'foo':{
        this.handleFoo(event)
        break;
      }
      default:{
        this.handleBar(event)
        break;
      }
    }
}

function dynamicInput() {
    var rState = this.props.reduxState;

    // Simplyify your render method in this way, and delegate conditional
    // branching to event handler    
    return <input type="text" placeholder={rState.value} 
                  onChange={ event => this.handleGeneric(event) } />
}

关于javascript - React 渲染相同的元素,它是动态组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52378605/

相关文章:

javascript - 这是将名称搜索到 JavaScript 数组中的正确方法吗?

reactjs - React App + Spring Boot - Chrome 中未设置 cookie 内的 JWT 身份验证 token

javascript - 如何通过类选择器获取宽度属性?

javascript - 如何更新和显示 map 对象?

javascript - 验证js不起作用,未捕获的ReferenceError : validate is not defined

javascript - 无法读取未定义的属性(已定义时)

javascript - 为什么无法读取对象?

javascript - ReactJS:This.props.toggleModal 不是一个函数

javascript - React 路由器未匹配任何路由

javascript - 如何使用 JavaScript 将文本框值从一个网页传输到另一个网页?