【问题标题】:Toggle Click On Select Tag - React切换单击选择标签 - 反应
【发布时间】:2018-10-16 18:55:15
【问题描述】:

我正在开发一个反应应用程序,当用户单击单个文本时,它将显示一个带有项目的选择标签。

我有两个问题出现在这里:

  1. 当我点击文本时,选择标签将出现在ALL列表项上,而不是被点击的项上。

例如我有列表:

--------------------------------
name          item
--------------------------------
George        text
Mikael        text

当我点击george 的文本时,george 和mikael 都会显示select 标签。这不是我想做的。它只能显示在被点击的列表项上。

  1. 从选择标签中选择一个项目后,它必须保持该状态,它将成为“文本”的默认值。

例如:

--------------------------------
name          item
--------------------------------
George        text
Mikael        text

如果我单击乔治文本,然后将出现乔治的选择标签。如果我选择值:item 1 它必须保留它并使其成为文本的默认值,因此输出将是这样的,然后选择标记将再次消失,然后如果单击它将再次出现,反之亦然:

--------------------------------
name          item
--------------------------------
George        item 1
Mikael        text

所以这有点像切换到常规文本并选择标记项。

到目前为止,我创建了一个有状态组件和一个无状态组件或一个有状态组件。当状态改变时,不要直接设置状态为真,它与当前状态相反 isItClick : !this.state.isItClick

import React, {Component} from 'react';
import ItemList from './ItemList';

class App extends Component {
  constructor(props) {
  super(props);
  this.state = {
    isItClick: false
  }
  this.clickfn = this.clickfn .bind(this);
}

clickfn = (value) => {
  this.setState(() => ({
    isItClick : !this.state.isItClick
  }));
}
render() {
   return (
      <div>
        {this.state.isItClick
          ? <ItemList clickfn ={this.clickfn }/>
          : <div className="myspace" onClick={this.clickfn }>TEXT</div>
        }

      </div>
    )
  }
}
export default App;

然后是我的 itemlist 组件:

import React, {Component} from 'react';
const ItemList = (props) => {
return (
  <div className="my-space">
    <select onChange={(e) => props._handleClick(e.target.value)}>
      <option value="1">Item 1</option>
      <option value="2">Item 2</option>
      <option value="3">Item 3</option>
    </select>
  </div>
  );
}
export default ItemList;

知道我在这里缺少什么吗?我需要解决什么问题才能使其根据我的目标发挥作用?请在这里帮助新手!

PS。将不胜感激演示代码。

【问题讨论】:

标签: javascript html reactjs jsx


【解决方案1】:
  1. 您还必须在状态变量中设置被点击的项目 ID,并且在列表的渲染方法中,您必须检查此 ID 并仅为被点击的项目返回 ItemList。如果您发布了代码以显示列表,我会分享编辑后的代码。

  2. 您必须保留一组状态来跟踪列表中的每个项目。在选择的 onChange 中,您必须设置状态值,并且 App 组件的渲染应该具有以下语句

&lt;div className="myspace" onClick={this.clickfn }&gt;{this.state.variableToTrackSelect}&lt;/div&gt;

我已经在https://codesandbox.io/s/7y8k77nrm1 发布了代码。

【讨论】:

  • 您的示例适用于多个项目,但代码适用于单个项目。请贴出实际代码以获得更准确的回复。
  • OK 将创建一个沙盒
  • 沙盒看起来不完整。 ItemList.js 是一个空文件,没有附加 onclick 事件,渲染函数看起来与上面的代码不同。请完成沙盒代码。
  • 如果你能看到请告诉我。
  • 除了第一项外,它都有效。如果下拉选择项 1,则 item1 仍然是选择标记。 @Rohith Murali
猜你喜欢
  • 1970-01-01
  • 2011-11-10
  • 2020-10-03
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 2016-03-30
相关资源
最近更新 更多