2016-02-26 12 views
6

मैंने ऑनप्रेस "हैंडलर" के साथ निम्नलिखित प्रकार की सूची प्रस्तुत की।ऑनप्रेस कॉलबैक के घटक संदर्भ को कैसे पास किया जाए?

enter image description here

मुझे एहसास हुआ है कि onPress हैंडलर बेकार है क्योंकि मैं दबाया जाति के संदर्भ नहीं मिल सकता है। मुझे रेफरी परिभाषित त्रुटि नहीं है।

var races = Engine.possibleRaces; 

function racePressed(ref) { 
    console.log("REF: " + ref); // is never called 
} 

var races = Engine.possibleRaces; 
var rowViews = []; 
for (var i = 0; i < races.length; i++) { 
    rowViews.push(
    <Text 
     ref={i} 
     onPress={() => racePressed(ref)} // ref is not defined 
     style={styles.raceText}>{races[i].text} 
    </Text> 

); 
} 

<View style={{width: Screen.width, flexDirection:'row', flexWrap: 'wrap', alignItems: "center"}}> 
     {rowViews} 
</View> 

मैंने भी पैरामीटर के रूप में पास करने का प्रयास किया। यह काम नहीं करता है, क्योंकि इसके पुनरावृत्ति के बाद मूल्य होता है। असल में इसकी दौड़ होती है। लम्बाई मान।

onPress={() => racePressed(i)} // Same as races.length 

संपादित करें:

मैं इस कार्यक्रम का पालन करने के अलग समस्या थी।

'use strict'; 
import React, { 
    AppRegistry, 
    Component, 
    StyleSheet, 
    Text, 
    View 
} from 'react-native'; 

let texts = [{text: "Click wrapper text1"}, {text: "Click wrapper text2"}]; 

class sandbox extends Component { 

    rowPressed(ref, i) { 
    console.log("rowPressed: " + ref + " " + i) 
    } 

    render() { 

    var rows = []; 

    for (var i = 0; i < texts.length; i++) { 
     rows.push(
     <Text 
      ref={i} 
      onPress={() => this.rowPressed.bind(this, i)} 
      style={styles.raceText}>{texts[i].text} 
     </Text> 
    ); 
    } 

    return (
     <View style={styles.container}> 

     <View> 
      {rows} 
     </View> 

     </View> 
    ); 
    } 
} 

const styles = StyleSheet.create({ 
    container: { 
    flex: 1, 
    justifyContent: 'center', 
    alignItems: 'center' 
    } 
}); 

AppRegistry.registerComponent('sandbox',() => sandbox); 

कॉलबैक नहीं बुलाया जाता है और सिवाय कोई त्रुटि फेंक दिया निम्नलिखित चेतावनी

[tid:com.facebook.React.JavaScript] Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of `sandbox`. See https://fb.me/react-warning-keys for more information. 

उत्तर

11

मेरा सुझाव आप उस समारोह को कन्स्ट्रक्टर में बांधते हैं ..

constructor(props){ 
    super(props); 
    //your codes .... 

    this.rowPressed = this.rowPressed.bind(this); 
} 

यह this पंक्तिरोधित फ़ंक्शन का संदर्भ देता है जैसा कि आप उम्मीद करते हैं, जिससे आपका कोड ठीक से काम करता है।

इसके अलावा, चेतावनी संदेशों से छुटकारा पाने के लिए आपको प्रत्येक <Text> तत्व के लिए अद्वितीय key गुण प्रदान करना चाहिए, <Text key={i} ....> का उपयोग करके आपके कोड में काम करना चाहिए।

+0

हल चेतावनी संदेश समस्या को हल करने के लिए चाण कुंजी! – Markku

+0

क्या आप थोड़ा और कोड साझा कर सकते हैं। मुझे निम्नलिखित कोड को "इस" तक पहुंच में कैसे बदलना चाहिए? 'प्रस्तुत करें: फ़ंक्शन() { फ़ंक्शन पंक्ति दबाया गया (आईडी) { // अपरिभाषित इस.स्टेट.रासेस [आईडी] .chosen! = This.state.races [id] .chosen की संपत्ति' स्थिति 'नहीं पढ़ सकता ; } this.rowPressed = this.rowPressed.bind (यह); ... onPress = {() => rowPressed (i)} ' – Markku

3

मैं ऐसी ही कुछ करने की कोशिश करते हैं और इस समाधान नहीं मिला:

render() { 
    var _data = texts; 
    return (
     <View style={styles.container}> 
     { _data.map(function(object,i) { 
      return (
       <Text ref={i} 
        onPress={() => this.rowPressed(i)} 
        style={styles.raceText}>{texts[i].text} 
       </Text>); 
      }) 
     } 
     </View> 
    ); 
} 

चीयर्स

+1

मैं "this.rowPressed (i)" में "इस" अभिव्यक्ति का उपयोग नहीं कर सकता हूं, अन्यथा मुझे "संपत्ति नहीं पढ़ी जा सकती" पंक्ति 'अपरिभाषित' दबाया गया है। मुझे बस rowPressed का उपयोग करने की आवश्यकता है और फ़ंक्शन ठीक से बुलाया जाता है। अब मुझे rowPressed फ़ंक्शन के साथ समस्या है। मैं अब इस तक पहुंच नहीं पा रहा हूं। 'फ़ंक्शन पंक्ति दबाया गया (आईडी) { this.state ... // अपरिभाषित } ' – Markku

+0

की संपत्ति' स्थिति 'को पढ़ नहीं सकता है, लेकिन कुछ कारणों से ऐसा ठीक से नहीं किया जा रहा है। 'var that = this; फ़ंक्शन पंक्ति दबाया गया (आईडी) { that.state.races [id] .chosen =! That.state.races [id] .chosen; ' – Markku

संबंधित मुद्दे

 संबंधित मुद्दे