【问题标题】:How to get value from <li> tag如何从 <li> 标签中获取价值
【发布时间】:2016-08-12 18:32:39
【问题描述】:

我是 React.js 的初学者,需要一些帮助。 当您单击它时,我想从&lt;li&gt;-tag 获取值或数据。我怎样才能做到这一点?

...
clickOnMe : function () {
   this.setState({myData : event.target.value});
}

render : function (){
   return (
   <div>
     <ul>
        <li value="Point" onClick={this.clickOnMe}>Point</li>
     </ul>
   </div>
 );
}
...

【问题讨论】:

  • 你想访问你控制下的属性(这样你就可以把它放在 props 或 state 中,或者制作 const),还是来自 DOM?

标签: javascript reactjs dom


【解决方案1】:

您收到的是undefined,因为target.value 仅用于input 等表单元素。

您可以向函数传递一个唯一标识符,然后您可以使用该标识符从this.state 中获取它的值。

实现可能会有很大差异。最大的问题可能取决于此元素的值是否可以在 DOM 中更改,或者是否始终保持静态。

以下是我为两者提出的解决方案:


元素可以在 DOM 中改变值:

如果您想更新 li 元素的值,您可以这样做:

getInitialState: function() {
  return {
    data: ["point1", "point2", "point3"];
  };
}

clickOnMe = (id) => {
   console.log(this.state.data[id]);
}

changeData = (id, value) => {
   let temp = this.state.data.slice();
   temp[id] = value;
   this.setState({temp});
}

render = () => {
   return (
   <div>
     <ul>
        <li value={this.state.data[0]} onClick={this.clickOnMe.bind(this, 0)}>Point</li>
     </ul>
   </div>
 );
}

this.state.data 是组件构造函数中的一个数组,包含每个元素的初始值。当您单击一个元素时,您将调用clickOnMe 函数并传入一个参数,该参数与当前元素的数据所在的数组中的索引相对应。

如果你以后想改变这个值,你可以调用changeData,把值和索引作为参数。复制整个数组,更改所述索引中的值,然后更新state。


元素在 DOM 中是静态的:

如果li 的值始终是静态的,那么你可以这样做:

clickOnMe = (val) => {
   this.setState({myData : val});
}

render = () => {
   return (
   <div>
     <ul>
        <li onClick={this.clickOnMe.bind(this, "Point")}>Point</li>
     </ul>
   </div>
 );
}

如果您希望事情是静态的,事情就简单多了。在这里你可以直接绑定那个元素对应的值,然后在函数中做你想做的事。

【讨论】:

  • 我试试看,控制台显示“Cannot read property 'bind' of undefined”
  • 感谢您的帮助,我找到了解决方案。 stackoverflow.com/questions/34842092/…
  • @EarlMegget,我已经更新了上面的答案,为您遇到的bind 错误提供了更好的解决方案。 (ES6)
  • 渲染方法中的 Bind() 将在每次渲染时返回新函数。所以每次引用都会是新的,并且必须更新 DOM
  • @AlexShwarc,它会返回一个新函数,是的,但它不会触发对 DOM 的额外更新,除非将新函数传递给另一个组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多