Ist es möglich, reaktionsvirtualisiert und Enzym zusammen zu verwenden? Wenn ich versuche, sie zusammen zu verwenden, bekomme ich anscheinend eine leere Liste von Gegenständen im Raster.Reagiert-virtualisierte Arbeit mit Airbnb/Enzym?
Antwort
Die 2 sollte ja zusammen funktionieren. Ich glaube, dass das wahrscheinliche Problem darin besteht, dass der reaktivierten Komponente eine Breite oder Höhe von 0 gegeben wird, was dazu führt, dass nichts gerendert wird. (Es rendert nur genug, um das "Fenster" zu füllen, das es hat.)
Angenommen, Sie verwenden den AutoSizer HOC- (die meisten Leute tun) - dann ein Muster, das ich hilfreich gefunden habe ist, exportieren Sie 2 Versionen von Komponenten- eine, die explizite width/height-Eigenschaften erwartet und eine, die die andere mit einem AutoSizer umschließt. Pseudo-Code wäre:
import { AutoSizer, VirtualScroll } from 'react-virtualized'
// Use this component for testing purposes so you can explicitly set width/height
export function MyComponent ({
height,
width,
...otherProps
}) {
return (
<VirtualScroll
height={height}
width={width}
{...otherProps}
/>
)
}
// Use this component in your browser where auto-sizing behavior is desired
export default function MyAutoSizedComponent (props) {
return (
<AutoSizer>
({ height, width }) => (
<MyComponent
height={height}
width={width}
{...props}
/>
)
</AutoSizer>
)
}
Eine Sache, die ich vergessen zu erwähnen. Ich benutze Enzym in node.js mit jsdom. Stützt sich AutoSizer auf die echte DOM-Messung? – camwest
Es hängt von 'getBoundingClientRect' und' getComputedStyle' ab. Sie können sehen, wie es hier Dinge misst: https://github.com/bvaughn/react-virtualized/blob/master/source/AutoSizer/AutoSizer.js#L93 – brianvaughn
Ok groß dann ist Ihre Empfehlung der Umgehung von AutoResizer die beste seit getBoundingClientRect ist in jsdom nicht korrekt. – camwest
Putting in meinem Testfall für mich gearbeitet:
import { AutoSizer } from 'react-virtualized';
// ...
it('should do something', function() {
spyOn(AutoSizer.prototype, 'render').and.callFake(function render() {
return (
<div ref={this._setRef}>
{this.props.children({ width: 200, height: 100 })}
</div>
);
});
// do something...
Ich benutze Jasmins spyOn hier, aber auch andere Bibliotheken haben ihre eigene Art von Funktionen zu überschreiben. Beachten Sie, dass dies gegen zukünftige Änderungen an der reaktivierten virtualisierten Bibliothek (this._setRef
wurde gerade aus dem Quellcode gezogen) ziemlich anfällig ist, und Sie möglicherweise falsche Positive geben.
ab dem reaktivierten 9.12.0 hat der Autosizer defaultWidth
und defaultHeight
Eigenschaften. Ich fand Einstellungen, die dazu führten, dass Enzymtests korrekt ausgeführt wurden - Rendering der untergeordneten Zeilen wie erwartet.
<AutoSizer disableHeight defaultWidth={100}>
{({ width }) => (
....
)}
</AutoSizer>
- 1. Arbeit mit geprüft ListBox
- 2. Arbeit mit Abständen Pandas
- 3. $ .post Arbeit mit Alarm
- 4. websphere Arbeit Manager Arbeit Timeout
- 5. Python Flask Arbeit mit Wraps
- 6. Arbeit mit Rettung in Schienen
- 7. Bildgröße Proportional + Arbeit mit SVG
- 8. Robolectric zur Arbeit mit Volley
- 9. AuthLogic zur Arbeit mit ActionCable
- 10. android: erhielt Fehler Arbeit mit Spinner
- 11. Rake Resque: Arbeit schlägt mit einfachen Beispiel
- 12. URL-Umschreiben - Arbeit nur mit Ziffer
- 13. Herstellung StatET Arbeit mit R 2.15.0
- 14. Arbeit mit Google Maps Navigation Absicht
- 15. Arbeit stehlen mit Parallel Computing Toolbox
- 16. Wie Mocha \ Chai Arbeit mit NativeScript iOS
- 17. Validierung keine Arbeit mit INTL-TEL-INPUT
- 18. Formular zur Arbeit mit jQuery Mobile Popups
- 19. Warum nicht Gleichheitsprüfung Arbeit mit Arrays
- 20. Starten der Arbeit mit FXyz Bibliothek
- 21. Einfache skalierbare Arbeit/Nachrichtenwarteschlange mit Verzögerung
- 22. Wie funktioniert die Arbeit mit NServiceBus?
- 23. pom.xml für die Arbeit mit tomee konfigurieren
- 24. Node.js: Arbeit mit app.use & app.get zusammen
- 25. C# Hilfe bei der Arbeit mit Arrays
- 26. Löscht Arbeit mit Zeigern in der Basisklasse?
- 27. Rsync in Ansible zur Arbeit mit Vagrant
- 28. Einfache CRUD Arbeit mit WPF und Datenbindung
- 29. Arbeit mit .git/info/ausschließen zu spät
- 30. angular2 Arbeit mit Observable (Http) ohne Nachladen
Sind Sie sicher, dass Sie eine Breite und Höhe> 0 an das Raster übergeben? (Eine Chance, dass Sie etwas Code teilen könnten?) – brianvaughn
Lassen Sie mich ein vereinfachtes Beispiel machen. – camwest
Ich denke, das Problem ist, dass ich Autosizer verwende. Wird weiter untersuchen ... – camwest