Vorrei serializzare un elemento React (un'istanza del componente React dato puntelli) e deserializzare altrove. Perchè lo chiedi? Mi piacerebbe essere in grado di inviare la lezione da un processo su stdout e renderlo in un altro processo. Voglio anche la componente reso per essere interattivo, così semplicemente usando ReactDOM.renderToString()
non sarà sufficiente ...Node.js: Come serializzare/deserializzare un componente React?
che cosa ho provato:
- serializzazione come una stringa e l'utilizzo di
eval()
per deserializzare esso - utilizzando un sostituto del costume e funzioni reviver per
JSON.stringify()
eJSON.parse()
rispettivamente
MyReactComponent.toString()
rendimenti:
"function MyReactClass() {
_classCallCheck(this, MyReactClass);
_get(Object.getPrototypeOf(MyReactClass.prototype), 'constructor', this).apply(this, arguments);
}"
che non contiene nessuno dei metodi univoci per il mio componente (ad esempio render()
o constructor()
).
Vedi questo codice di esempio nel JS Bin: http://jsbin.com/febuzupicu/edit?js,console,output
Non sei sicuro di cosa intendi con renderingToString: sarebbe comunque interattivo una volta visualizzato e reso disponibile sul client. Non devi preoccuparti di serializzare il componente che reagisce se hai il tuo stato in un negozio (ad es. Redux) - avresti solo bisogno di serializzare il negozio.Ovviamente qualsiasi stato solo nell'istanza del componente andrebbe perso, ma potreste scrivere componenti puri –
Il problema è che la classe del componente React non esiste nella destinazione, quindi non sarei in grado di chiamare 'ReactDOM.render()' alla destinazione Sto cercando di capire come posso accedere alla classe del componente React dalla destinazione, sia che la stia inviando come una stringa dall'origine (che non ha ancora funzionato), salvandola in un file e richiedendo quel file dal destinazione (poiché entrambi i processi saranno in esecuzione sulla stessa macchina), ecc. – senornestor
Non puoi semplicemente inviare l'intero file, caricarlo e utilizzare eval su di esso dal lato ricevente? –