标签: react-universal

窗口.__ INITIAL_STATE__仍然是在React Universal应用程序中将初始状态传递给客户端的首选方法吗?

我正在阅读一本关于React和Universal应用程序的书,其中作者声称以下是将初始状态从服务器传递到客户端的最佳实践:

server.js

import React from 'react';
import {renderToStaticMarkup} from 'react-dom/server';
import Myapp from '../MyApp';
import api from '../services';

function renderPage(html, initialData) {
    return `
        <html>
            <body>
                ${html}
            </body>
            <script>
                window.__INITIAL_STATE__ = ${JSON.stringify(initialData)};
            </script>
            <script src="bundle.js"></script>
        </html>
    `;
}

export default function(request, reply) {
    const initialData = api.getData();
    const html = renderToStaticMarkup(<MyApp />);
    reply(renderPage(html, initialData);
}
Run Code Online (Sandbox Code Playgroud)

然后,在客户端中,您将读出如下数据:

bundle.js

const initialData = window.__INITIAL_STATE__ || {};
const mountNode = document.getElementById('root');
ReactDOM.render(<MyApp />, mountNode);
Run Code Online (Sandbox Code Playgroud)

据我所知,初始状态首先转换为字符串,然后作为全局对象文字附加到窗口对象.

这个解决方案看起来非常粗糙.这本书是在2016年中期发布的.使用的方法window.__INITIAL_STATE__仍然是如何做到这一点还是有更好的解决方案?

例如,我可以想象,可以在单独的微服务调用中提供初始状态,然后也可以比将数据直接嵌入到文档中更好地缓存,因为这样初始状态数据必须每次传输页面刷新的时间,即使数据没有改变.

javascript ecmascript-6 reactjs react-universal

13
推荐指数
1
解决办法
8624
查看次数

如何获取引用以存储在react / redux中?

在我的reactjs-universal组件中,我这样写:

const mapStateToProps = (store) => {
  return {
    cars: store
  }
}

export default connect(mapStateToProps)(SearchForm)
Run Code Online (Sandbox Code Playgroud)

在同一组件中,我想调度一个类似的动作:

 store.dispatch({type: 'SHOWDETAIL', data: 'hi'});
Run Code Online (Sandbox Code Playgroud)

运行此命令后,我得到:

Uncaught TypeError: _create2.default.dispatch is not a function
Run Code Online (Sandbox Code Playgroud)

是否有可能以某种方式在我的组件中获得对商店的引用,以便我可以分派动作?

reactjs react-redux react-universal

5
推荐指数
1
解决办法
1592
查看次数

通用应用中的JWT身份验证(服务器端呈现)

通用或服务器端渲染会在将页面发送到客户端之前组成页面。那时,除非使用cookie,否则用户没有机会提交任何凭据。JWT鼓励使用LocalStorage而不是cookie来存储令牌,我认为这是一个好习惯。

我正在尝试为类似于博客的应用设置SSR。用户创建的内容可以是公开的(任何人都可以找到并阅读)或私有的(只有用户和协作者才可以找到并阅读)。在SSR上处理公共内容很容易,但是私有内容需要存储在LocalStorage中的令牌。

我能想到的最好的解决方案是发送一个存根,或者一个加载页面,客户端可以从中将凭据发送到服务器以检索私有内容。我看到的这种方法的问题是一种私密性:显示加载页面或存根会泄漏出该URL上实际上有内容,即使由于没有凭据而解析为404时也是如此。发送存根/加载页面以获取所有公共或私人内容的内容,将会破坏服务器端呈现的目的。

所以我的问题是,处理需要身份验证而不使用Cookie的呈现内容的最佳实践是什么?欢迎任何示例。尽管我目前使用的是Angular 5,但任何框架都可以。

authentication privacy jwt angular-universal react-universal

5
推荐指数
0
解决办法
548
查看次数

React SSR ReferenceError:文档未定义

我无法呈现 React 服务器端。我总是得到^

参考错误:文档未定义

var root = document.getElementById('root');

我知道节点不理解浏览器文档对象是怎么回事。但我似乎无法修复它。我在 webpack、服务器或 app.js 中做错了什么吗?

这是我的代码

服务器.js

import express from 'express';
import path from 'path';
import React from 'react';
import { renderToString } from 'react-dom/server';
import { StaticRouter } from 'react-router-dom';
import { Provider } from 'react-redux';
import configureStore from './src/store/configureStore';
import routes from './src';

const app = express();

app.use(express.static(path.join(__dirname, 'build')));

/**
 * React application route, supports server side rendering.
 */
app.get('/*', function(req, res) {
  // Create a context for <StaticRouter>, which …
Run Code Online (Sandbox Code Playgroud)

node.js reactjs webpack server-rendering react-universal

5
推荐指数
1
解决办法
5808
查看次数

如何在react native中设置同一行的两个输入?

嘿我想在同一行设置两个textInputs,在android模拟器中命名为Expiration date和CVV.

<View style={{flex: 1, flexDirection: 'row'}}>
<Text style={styles.label}style= {{width : 100}}>Expiration date</Text>
    <View style={styles.inputWrap}>
        <TextInput style={styles.inputdate} />  
    </View>

      <Text style={styles.label}>CVV</Text>
   <View style={styles.inputWrap}>
      <TextInput  style={styles.inputcvv } maxLength={17} />
  </View>
Run Code Online (Sandbox Code Playgroud)

这里包括两个textInputs的CSS

inputWrap: {
             borderColor: '#cccccc',
             borderBottomWidth: 1,
             marginBottom: 10,
   },
     inputdate: {
        fontSize: 14,
        marginBottom : -12,
        color: '#6a4595',
      },
      inputcvv: {
        fontSize: 14,
        marginBottom : -12,
        color: '#6a4595',
      },
Run Code Online (Sandbox Code Playgroud)

请让我知道如何在同一行设置此... ..提前感谢

javascript android reactjs react-native react-universal

3
推荐指数
1
解决办法
9973
查看次数