【发布时间】:2016-05-07 17:40:59
【问题描述】:
我想序列化一个 React 元素(给定 props 的一个 React 组件实例)并在其他地方反序列化它。你为什么问?我希望能够通过标准输出从一个进程发送类并将其呈现在另一个进程中。我还希望渲染的组件是交互式的,所以仅仅使用ReactDOM.renderToString() 是不够的……
我尝试过的:
- 将其序列化为字符串并使用
eval()对其进行反序列化 - 分别为
JSON.stringify()和JSON.parse()使用自定义替换器和恢复器函数
MyReactComponent.toString() 返回:
"function MyReactClass() {
_classCallCheck(this, MyReactClass);
_get(Object.getPrototypeOf(MyReactClass.prototype), 'constructor', this).apply(this, arguments);
}"
其中不包含我的组件独有的任何方法(例如render() 或constructor())。
在 JS Bin 中查看此示例代码:http://jsbin.com/febuzupicu/edit?js,console,output
【问题讨论】:
-
不确定你的意思 RE renderToString - 一旦在客户端渲染和初始化,它仍然是交互式的。如果您在 store 中有状态(例如 redux),则无需担心序列化 react 组件 - 您只需要序列化 store。当然组件实例中的任何状态都会丢失,但是你可以编写纯组件
-
问题是目的地不存在React组件类,所以无法在目的地调用
ReactDOM.render()。我试图弄清楚如何从目标访问 React 组件类,是否将其作为字符串从源(尚未工作)发送,将其保存到文件并从目的地(因为两个进程将在同一台机器上运行)等。 -
你不能只发送整个文件,加载它并在接收端使用 eval 吗?
-
你能提供一个具体的用例吗?通常不会在客户端之间共享组件的实例,只共享在别处创建新实例所需的数据。
-
我正在构建一个 Atom 插件,允许开发人员编写代码并将结果可视化。我想允许临时可视化,因此可视化代码将在开发人员端编写并在插件端呈现。所有通信都发生在 console.log -> stdout,所以它是字符串。我认为将可视化代码序列化为字符串并反序列化(eval)并使用它来呈现交互式可视化效果会很好。
标签: javascript node.js serialization reactjs deserialization