2016-03-25 38 views
1

Redux kullanıyorum, ListView'e abone oldum, konsol günlüğü iletisi görüntülenir, ancak ekran sıcak bir yeniden yüklemeden sonra güncellenmez. ListView'in neden yeni Todo'yu ekranda çizemeyeceği hakkında bir fikrin var mı?ListView yalnızca yeniden yüklendikten sonra yeniden işleniyor

render() { 
    var store = getStore(); 
    var todos = store.getState().todos; 
    var dataSource = this.dataSource.cloneWithRows(todos); 
    console.log("Rendering: ", jtodos); 
    return (
     <View> 
      <Text>Todos to do</Text> 
      <ListView 
      dataSource={dataSource} 
      renderRow={this.renderTodo} 
      style={styles.listView}/> 
     </View> 
    ); 
} 

Ben de ....

renderTodo(todo) { 
    console.log("Render:", todo); 
    return (
     <View style={styles.container} key={todo.id}> 
      <View style={styles.details}> 
       <View style={styles.rightContainer}> 
       <Text style={styles.title}>{todo.text}</Text> 
       </View> 
      </View> 
     </View> 
    ); 
} 
render() { 
    var store = getStore(); 
    var todos = store.getState().todos; 
    console.log("Rendering: ", todos); 
    var dataSource = this.dataSource.cloneWithRows(todos); 
    return (
     <View> 
      <Text>Todos to do</Text> 
      {todos.map(this.renderTodo)} 
     </View> 
    ); 
} 

konsol günlüğü sıcak yeniden yükleme sonrasına kadar ortaya DEĞİLDİR yenisi dahil TÜM todos gösterir kod değiştirdik

Ekran neden todo'yu göstermiyor?

Rendering: [Object, Object, Object, Object, Object, Object, Object] 
Render: Object {text: "fghf", id: 1, completed: false} 
Render: Object {text: "fghfbhhg", id: 2, completed: false} 
Render: Object {text: "fghfbhhggfjg", id: 3, completed: false} 
Render: Object {text: "fghfbhhggfjg", id: 4, completed: false} 
Render: Object {text: "fghfbhhg", id: 5, completed: false} 
Render: Object {text: "fghfbhhgkkkk", id: 6, completed: false} 
Render: Object {text: "f", id: 7, completed: false} 

Bunların hiçbiri sıcak bir yeniden yüklenene kadar ekranda görünmez. Sıcak bir yeniden yükleme sonrasında eklenen herhangi bir sonraki sıcak yeniden yüklemeye kadar gösterilmez.

+0

Garip reaksiyona ayarlayın. Öyleyse her şey son nesne hakkı dışında işler (metin: f, id: 7, ...) '? – James111

+0

Aslında, sıcak yeniden yükleme gerçekleşene kadar hiçbir şey gerçekleşmez, sonra her şey işlenir. AMA konsolu her zaman onları tüm render. – boatcoder

+0

"this.dataSource", "render" yönteminizde ne ifade ediyor? –

cevap

0

Yaklaşık 3-4 ay boyunca react-native ile geliştiriyorum ve listview'u kullanmaya başladım. Durumu bir değişkene atamak yerine aslında ayarlamanız gerektiğine inanıyorum.

Aşağıdaki kodu deneyin, çalışıp çalışmazsa% 100 emin değilim.

render() { 
    var store = getStore(); 
    var todos = store.getState().todos; 
    // You need to actually set the state! 
    this.setState({ 
     dataSource: this.state.dataSource.cloneWithRows(todos), 
    }); 
    console.log("Rendering: ", jtodos); 
    return (
     <View> 
      <Text>Todos to do</Text> 
      <ListView 
      dataSource={this.state.dataSource} 
      renderRow={this.renderTodo} 
      style={styles.listView}/> 
     </View> 
    ); 
} 

düzenlemek

componentWillReceiveProps veya uygun içindeki durum ömür döngüsü yöntemi

+0

Hayır, işe yaramayacak. 'Render' yönteminde' setState 'kullanamazsınız. SetState çağrısı, bileşeninizi yeniden oluşturur. 'Render' içinde kullanmak sonsuz bir döngü yaratır :) –

+0

Ahh whoops! ComponentWillReceiveProps veya uygun tepkime yaşam döngüsü yöntemine @ G.Hamaide olarak ayarlayın – James111

İlgili konular