到目前为止我有…
客户端App.js呈现App组件.
render( <Provider store={store}> <App /> </Provider>,document.body );
一个App组件:
const App = () => ( <div> <SearchContainer /> <TodoContainer /> </div> )
如果两个项都是容器,则SearchContainer从输入框获取输入,触发一个动作,该动作将使用加载的todo`s(来自远程休息服务)调度消息.
现在我喜欢在服务器端的页面加载上加载那些todo,并在页面显示后显示它们.我该怎么办?有没有办法在页面实际显示之前不使用服务器端渲染和加载项目?
到目前为止,我到目前为止是routes.js文件:
const middleware = [ thunk ] if (process.env.NODE_ENV !== 'production') { middleware.push(createLogger()) } const store = createStore(reducer,applyMiddleware(...middleware)) app.get('/',function(req,res) { res.render('home',{ markup: ReactDOMServer.renderToString( <Provider store={store}> <App /> </Provider> ) }); //Some code calling remote service goes here
这通常是加载和应用程序,但我如何将加载的数据推送到TodoContainer?它应该是某种方式来分派消息,还是应该使用todos数组作为属性来初始化App组件?
解决方法
解决您遇到的问题的最常见方法是从componentDidMount加载数据.在返回此数据之前,您需要显示某些内容,例如微调器或笨蛋或消息或空白页.就是那样子.您的应用不会是唯一一个带有加载指示器的应用…
但是,您还可以执行的操作是在发送页面之前获取数据服务器端,然后使用< script>中的页面将其发送下来.标记和JSON.stringify的帮助.
<script> window.initialData = { "myData": [ 1,2,3 ] }; </script>
然后你可以用它来初始化商店.这使数据立即可用,并消除了对API端点的需求.
const store = createStore(reducer,window.initialData,applyMiddleware(...middleware));
您也可以使用相同的数据在服务器上进行渲染,但无论如何都不需要它.
最后,我想指出你正在渲染document.body,这是一个坏主意,因为很多浏览器扩展和插件为了自己的需要在DOM中添加了div或其他东西. React不适合那些.它期望控制它传递的元素.最好只创建一个div并将其渲染成一个div.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。