2015-03-30 21 views
7

Ich habe eine React-Komponente, die mehrere Akkordeon in einer Liste verwalten, aber wenn ich ein Kind, auf React-Dev-Tools aktualisieren, zeigte es den aktualisierten Text, aber auf der Ansicht/ui, tut es nicht aktualisieren. Bitte um Rat.React Component View wird nicht aktualisiert

var AccordionComponent = React.createClass({ 
    getInitialState: function() { 
    var self = this; 
    var accordions = this.props.children.map(function(accordion, i) { 
    return clone(accordion, { 
    onClick: self.handleClick, 
    key: i 
    }); 
}); 

    return { 
    accordions: accordions 
    } 
}, 
handleClick: function(i) { 
    var accordions = this.state.accordions; 

    accordions = accordions.map(function(accordion) { 
    if (!accordion.props.open && accordion.props.index === i) { 
     accordion.props.open = true; 
    } else { 
     accordion.props.open = false; 
    } 
    return accordion; 
    }); 

    this.setState({ 
    accordions: accordions 
    }); 
}, 
componentWillReceiveProps: function(nextProps) { 
    var accordions = this.state.accordions.map(function(accordion, i) { 
    var newProp = nextProps.children[i].props; 

    accordion.props = assign(accordion.props, { 
     title: newProp.title, 
     children: newProp.children 
    }); 

    return accordion; 
    }); 

    this.setState({ 
    accordions: accordions 
    }); 
}, 
render: function() { 
    return (
    <div> 
     {this.state.accordions} 
    </div> 
); 
} 

enter image description here

enter image description here

Edit:
Die Komponente componentWillReceiveProps Ereignis hat auslösen, aber es immer noch nicht aktualisiert.

Dank

Antwort

3

Nach Tagen der dieses Problem zu lösen versuchen, habe ich kam mit einer Lösung aus. componentWillReceiveProps Das Ereignis wurde ausgelöst, wenn sich die Requisiten der Komponente ändern. Es gab also kein Problem. Das Problem war, dass die Kinder der AccordionListComponent, AccordionComponent nicht aktualisiert seine Werte/Requisiten/Zustand.

Aktuelle Lösung:

componentWillReceiveProps: function(nextProps) { 
var accordions = this.state.accordions.map(function(accordion, i) { 
    // get current accordion key, and props value 
    // update new props with old 
    var newAc = clone(accordion, nextProps.children[i].props); 

    // update current accordion with new props 
    return React.addons.update(accordion, { 
     $set: newAc 
    }); 
    }); 

this.setState({ 
    accordions: accordions 
}); 
} 

Ich habe versucht, nur Klon zu tun und die Akkordeons zurückgesetzt, aber anscheinend hat es nicht die Komponente aktualisieren.

Danke

1

Ich stieß auf ein ähnliches Problem. Es könnte also relevant sein, hier meine Lösung zu melden. Ich traf nur einmal die Ladedatum Taste


hatte ich eine grafische Darstellung, die zu jeder Zeit nicht aktualisiert wurde immer (ich visuellen Wechsel nach dem zweiten Klick sehen konnte).

Die Diagrammkomponente wurde als Kind einer übergeordneten Komponente (verbunden mit dem Redux-Speicher) entworfen und die Daten wurden daher als Prop übergeben.

Problem: Daten wurden ordnungsgemäß aus dem Speicher abgerufen (in Parent), aber es scheint, dass die Grafikkomponente (Kind) nicht auf sie reagierte.

Lösung:

componentWillReceiveProps(nextProps) { 
    this.props = null; 
    this.props = nextProps; 
    // call any method here 
    } 

Hoffnung, die in someway beitragen könnten.

Verwandte Themen