【问题标题】:Changing text on button in muliple item (React.js)更改多个项目中按钮上的文本(React.js)
【发布时间】:2018-11-18 09:25:19
【问题描述】:

我是使用 react 的新手。我有一系列数据,每个项目都有一个按钮,通过单击它,必须更改特殊 div 的文本,但在我的问题中,通过单击一个项目的按钮,所有项目中的div的文本都将被更改。我希望当我单击按钮时,该项目中的那个div的文本被更改。提前谢谢

class App extends React.Component {
constructor(props, context){
super(props, context);
this.state = {
data: [],
};
    $.ajax({
    url:"/json.bc",
    type:"get",
    success:(result)=>{
    this.setState({data: eval(result)});
    }
    })
    }
   renderFlight(){
   return this.state.data.sort((a, b) => a.total -    b.total).map((item,i)=>{
  return(
  <div class="item"> <div class="btn" onClick={((e) => this.rueldep(e, item))}>click</div>
  <div  class="text">{this.state.txt}</div>
  </div>
 )})}
 rueldep= (e, item) => {
  var Text= item.info.departureinformation.routeshow.description
   if (typeof desc === 'string'){
    return desc
     } else {
    this.setState({
        txt: Text
     });      
    }
    }; 

  render(){
    return(
   <div>{this.renderFlight()}</div>
    )}}
   ReactDOM.render(<App/>, document.getElementById('Result')); 

【问题讨论】:

  • 数据数组中的每个对象都有唯一的 id 吗?
  • 是的,但 id 是一个对象,我不能使用它。我试图在 (item,i) 中使用用户“i”。
  • 让我知道你在 this.state.data 中有什么?
  • [{'_id': {'value': 'eydGYXJlU291cmNlQ29kZSc6ICczMzMyMzUzNjM5NjMzNjM1MzEzNTY0MzIzNDY2MzI2MjM5NjUzMjM5NjIzMDYzNjM2MjYyMzY2MzM4MzczODMzMjYzNjMzMjYzMzMyMzgzMjMxMzMzODM4JywgJ3Byb3ZpZGVyJzogeydwcm92aWRlcl9pZCc6ICczJywgJ2RtbmlkJzogMzk4MS4wfSwgJ2ZhcmV0eXBlJzogNH0=', 'provider': {'provider_id': '3', 'dmnid': '3981-0'}, 'fareType ': 4}]
  • 这是我的物品的 ID 之一,它是一个对象

标签: reactjs


【解决方案1】:

你可以使用地图中的索引来实现你想要的

在状态中初始化一个数字变量

  this.state = {
     data: [],
      id: 0
  };

在 rueldep 处理函数中,将 index + 1 设置为 id 状态变量,如下所示

    rueldep= (e, item, index) => {
      var s = item.info.departureinformation.routeshow.description
       if (typeof desc === 'string'){
         return desc
       } else {
            this.setState({
                txt: 'clicked',
                id: index+1
            });      
        }
      }; 

现在在 renderFlight 方法中比较选定的 id 和数据中的 id,如果两者都匹配显示文本到特定的 div,如下所示。循环渲染时不要忘记为父 jsx 元素添加唯一键

  renderFlight(){
     return this.state.data.sort((a, b) => a.total -    b.total).map((item,i)=>{
     return(
        <div key={"Key-"+i} class="item"> <div class="btn" onClick={e => this.rueldep(e, item, i)}>click</div>
       <div  class="text">{(this.state.id == i +1) ?this.state.txt : null}</div>
    </div>
     )})}

【讨论】:

  • 我无法使用数据中的 id。它是一个对象
  • 我没有使用 id。请仔细阅读我的更新答案一次
  • 感谢 Hemadri Dasari。
  • 很抱歉 Hemadri Dasari ,但有一个问题。我不知道为什么当我单击 item1 中的按钮并在 div class="text" 中显示文本然后单击 item2 中的按钮时 item1 的 div class="text" 的文本将为空???跨度>
  • Yes Clicked 将仅显示匹配的一个。当第二个点击第一个文本将消失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多