2017-08-16 174 views
0

所以我的代碼是:更新狀態

export default class MyClass extends Component { 

    constructor(props) { 
    super(props); 
    this.state = { 
     data: [ 
      {id: 101, name:"One", thevalue:11}, 
      {id: 102, name:"Two", thevalue:22}, 
      {id: 103, name:"three", thevalue:33} 
     ] 
    } 
    } 

    handleOnPress() { 
    << HOW DO I CODE THIS ?? >> 
    I want to increase the number count in thevalue of the pressed item 
    } 

    render() { 
     return(
     <FlatList 
      data = {this.state.data} 
      renderItem = { 
       ({item}) => 
       <TouchableOpacity onPress={this.handleOnPress} > 
        <Text> {item.name} + {item.thevalue} </Text> 
       </TouchableOpacity> 
      } 
     /> 
    ) 
    } 
} 

我希望能夠增加只有thevalue單擊的項目的數量。所以我應該做一個setState對不對?但是我怎麼知道我需要運行哪個項目呢?我是否需要將點擊項目的id傳遞給函數?如果是的話,我該怎麼做?

非常感謝。

UPDATE1:

handleOnPress(id) { 
     this.setState({ 
     thevalue: this.state.thevalue+1 
    }); 
} 
+0

你能提供'item'在'onPress'?例如:'{this.handleOnPress(item)}''或類似的? –

+0

@JeffHuijsmans你不能這樣稱呼它,或者handleOnPress將在每個物品的渲染上被調用。你需要按照我的回答做些事情:) –

+0

@MattDerrick很好,謝謝!我想在另一個框架的方式:) –

回答

3

你必須給它的參數,所以我們知道什麼產品來增加:

onPress={this.handleOnPress.bind(this, item.id)} 
... 
handleOnPress(id) { 
    // increment id 
} 

或者這是一個有點更具可讀性,但做同樣的東西:

onPress={() => this.handleOnPress(item.id)} 
+0

我有我的功能:'this.setState({thevalue:this.state.thevalue + 1});'但不工作。 – Somename

+0

@Somename什麼是錯誤? –

+0

更新了我的問題。不知道我是否正確地做它 – Somename

1

你可以通過idonPress然後更新相應的thevalue

export default class MyClass extends Component { 
 

 
    constructor(props) { 
 
    super(props); 
 
    this.state = { 
 
     data: [ 
 
      {id: 101, name:"One", thevalue:11}, 
 
      {id: 102, name:"Two", thevalue:22}, 
 
      {id: 103, name:"three", thevalue:33} 
 
     ] 
 
    } 
 
    } 
 

 
    handleOnPress(id) { 
 
    let {data} = this.state; 
 
    let idx = data.findIndex(x => x.id == id); 
 
    data[idx].thevalue ++; 
 
    this.setState({data}); 
 
    } 
 

 
    render() { 
 
     return(
 
     <FlatList 
 
      data = {this.state.data} 
 
      renderItem = { 
 
       ({item}) => 
 
       <TouchableOpacity onPress={() => this.handleOnPress(item.id)} > 
 
        <Text> {item.name} + {item.thevalue} </Text> 
 
       </TouchableOpacity> 
 
      } 
 
     /> 
 
    ) 
 
    } 
 
}

+0

我收到了'undefined不是一個對象(評估'data [idx] .thevalue')'我按照你的代碼 – Somename

+0

'onPress = {(item)=> this.handleOnPress(item.id)}'你是否改變了' onPress'功能? –

+0

編號與此處完全相同。爲idx提供相同的錯誤 – Somename