小编Ger*_*api的帖子

将反应路由器中的道具传递给服务器上的子项

我正在使用React,react-router v3和material-ui构建一个Isomorphic应用程序.在服务器端呈现中,material-ui的一个要求是将客户端的用户代理传递给主题,因此MUI将能够相应地为其内联样式添加前缀.

最初应用程序的根组件是路由器,即在服务器端:

<RouterContext {...renderProps}/>
Run Code Online (Sandbox Code Playgroud)

在客户端:

<Router children={routes} history={browserHistory} />
Run Code Online (Sandbox Code Playgroud)

现在,由于我不知道如何将用户代理传递给RouterContext服务器,我想出了一个(丑陋的?)解决方案:我创建了一个名为Root的无用组件,我向其传递了用户代理, Root将路由器作为他的children,即在服务器端:

<Root userAgent={userAgent}>
  <RouterContext {...renderProps}/>
</Root>
Run Code Online (Sandbox Code Playgroud)

在客户端:

<Root>
  <Router children={routes} history={browserHistory} />
</Root>
Run Code Online (Sandbox Code Playgroud)

现在,一切都运作良好,但如果我不需要,我真的不喜欢创造那个无用的元素,所以我的问题是 - 有更好的方法吗?

我可以以某种方式将用户代理传递到RouterContext服务器上,然后服务器将其传递给将创建主题的索引路由吗?

以下是有Root兴趣的人的代码:

class Root extends React.Component {
  constructor(props){
    super();
    this.muiTheme = getMuiTheme(customTheme, { userAgent: props.userAgent });
  }

  render () {
    return (
    <MuiThemeProvider muiTheme={this.muiTheme}>
      {this.props.children}
    </MuiThemeProvider>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-router material-ui

6
推荐指数
1
解决办法
496
查看次数

wepack-isomorphic-tools vs process.env.BROWSER

我已经阅读了有关同构应用程序开发的内容,并且我已经看到了在服务器端处理资源加载的方法.
一个是webpack-isomorphic-tools.
另一个是"hack",你在webpack中定义一个插件,它将process.env.BROWSER设置为true,并根据该变量加载资源.即:

if(process.env.BROWSER){
  require('./styles.scss');
}
Run Code Online (Sandbox Code Playgroud)

我想知道,哪个更好,为什么?

node.js reactjs isomorphic-javascript webpack-isomorphic-tools

6
推荐指数
0
解决办法
726
查看次数

React Router:加载时显示进度

当我从另一个路径切换一条路线时,我想显示一个进度条,我找到了这个包:nprogress,用于像youtube一样的进度.

我的问题是使用React Router实现这一点.我不知何故需要NProgress.start();在每次启动路由NProgress.done();时执行,并在加载时执行.

有没有更好的办法(如路由变化或路由器的路由监听器之间的中间件),其他则去thorugh每条路线和做start()onEnter,并且done()对组件的DidMount()

reactjs react-router

6
推荐指数
1
解决办法
2917
查看次数

提取:从提取响应中获取Cookie

我正在尝试使用react上的fetch实现客户端登录。

我正在使用护照进行身份验证。我之所以使用fetch而不是常规的原因form.submit()是因为我希望能够从我的Express服务器接收错误消息,例如:"username or password is wrong"

我知道护照可以使用flash邮件发送回邮件,但是flash需要进行会话,因此我想避免这种情况。

这是我的代码:

fetch('/login/local', {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        username: this.state.username,
        password: this.state.password,
      }),
    }).then(res => {
      console.log(res.headers.get('set-cookie')); // undefined
      console.log(document.cookie); // nope
      return res.json();
    }).then(json => {
      if (json.success) {
        this.setState({ error: '' });
        this.context.router.push(json.redirect);
      }
      else {
        this.setState({ error: json.error });
      }
    });
Run Code Online (Sandbox Code Playgroud)

服务器发送的cookie很好,如您在chrome的dev工具上看到的: 网络-Cookies 网络-标头

但是chrome不会设置cookie,在“应用程序”->“ cookies”->“ localhost:8080”中:“该站点没有cookie”。

任何想法如何使其工作?

cookies fetch express

6
推荐指数
2
解决办法
1万
查看次数

重定向到通知访问设置

我目前正在开发一款使用Android的Android应用NotificationListenerService,这要求用户为我的应用启用通知访问权限Setting -> Security -> Notification Access.

我的问题是,我可以将用户重定向到这个地方,以便他们启用吗?到目前为止,我只能将它们引导到Setting -> Security窗口.

此外,是否可以首先检查用户是否已启用我的应用程序的通知访问权限,然后才重定向它们?

android

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

Node.js提示跳过输入

我目前正在Coursera上学习课程,并使用node.js代码进行练习来计算二次表达式.所有的代码都给出了,这个练习只是为了让我们知道node.js,但我仍然遇到输入提示的问题.
代码在这里:

var quad = require('./quadratic');

var prompt = require('prompt');

prompt.get(['a', 'b', 'c'], function (err, result) {
    if (err) { return onErr(err); }
    console.log('Command-line input received:');
    console.log('a: ' + result.a);
    console.log('b: ' + result.b);
    console.log('c: ' + result.c);

        quad(result.a,result.b,result.c, function(err,quadsolve) {
            if (err) {
                 console.log('Error: ', err);
                }
                else {
             console.log("Roots are "+quadsolve.root1() + "  " + quadsolve.root2());
                }
       });
});
Run Code Online (Sandbox Code Playgroud)

如你所见,我正在使用prompt模块,但当我输入输入时a,cmd正在跳过输入b并请求我输入`c,这反过来导致错误.

在此输入图像描述

如何解决这个问题,为什么会这样?

javascript node.js

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

反应本机后台套接字 IO

我正在开发一个视频通话应用程序(使用 react native webrtc),我想在后台维护一个打开的套接字来监听视频通话,并推送通知作为响应,以便用户可以回答。

我已经看到了这个问题,但我想知道现在是否有更好的解决方案,如果没有,我希望您能指导我使用更本机的指导解决方案,这将帮助我了解如何实现什么我想要。

谢谢。

android ios socket.io react-native

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

类名没有出现 React

不确定我哪里出错了。这是我的用于捆绑客户端的 webpack.prod。但有些类名没有出现在我的 html 中

const path = require('path');
const webpack = require('webpack');
const dependencies = require('./package.json');
const ManifestPlugin = require('webpack-manifest-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const VENDOR_LIBS = [];
Object.entries(dependencies.dependencies).forEach(([key, value]) => {
  VENDOR_LIBS.push(key);
});

const BrowserConfig = {
  entry: {
    bundle: './src/index',
    vendor: VENDOR_LIBS,
  },
  output: {
    path: path.resolve('./dist'),
    publicPath: '/',
    filename: '[name].js',
    pathinfo: true,
  },
  resolve: {
    extensions: ['.js', '.jsx', '.json', '.scss', '.css'],
  },
  module: {
    rules: [
      {
        use: ['react-hot-loader/webpack', 'babel-loader'],
        test: /\.(js|jsx)$/,
        exclude: …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs webpack extract-text-plugin

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

React Relay:将数据添加到边缘

我将首先介绍我的应用程序:简单的投票应用程序,用户可以在其中创建投票并对其进行投票。简单。
当前,我的graphql模式由用户类型,投票类型和投票类型组成,其中用户和投票通过中继连接与其投票具有一对多关系。投票类型包含对其投票者和民意调查的引用,时间戳和实际投票值。

现在,据我所知,在规范graphql列表上使用连接的优点之一是能够在边缘上存储数据(除了分页等)。我该怎么办?

如果确实可行,我的计划是摆脱投票类型,直接通过连接连接用户及其投票的民意调查,并在连接边缘存储投票值及其时间戳。

如果重要的话,选民与其民意测验之间的联系应该是双向的,即每个用户都与他的投票民意测验相连,而每个民意测验都与其选民相连。

reactjs graphql graphql-js relayjs

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

React - 在组件状态下向数组内部的对象添加属性

我正在获取状态中的对象数组,并且尝试为每个对象添加一个属性。
问题是我可以看到我的属性被添加到每个对象中,但是当我映射所有这些对象并尝试console.log它时,我得到了undefined

添加属性

addFavourites() {
        let data = this.state.data.map((e) => {
            e.favourite = false;
            return e;
        });
        return data;
    }
Run Code Online (Sandbox Code Playgroud)
state = {
        data: []
    }
Run Code Online (Sandbox Code Playgroud)

addFavourites 在这里被调用:

getItem = () => {
        this.service
            .mergeData()
            .then((body) => {
                this.setState({
                    data: body
                },
                () => {
                    this.addFavourites();
                },
                () => {
                    this.dataToFilter();
                });
            });
    }

    componentDidMount(){
        this.getItem();
    }
Run Code Online (Sandbox Code Playgroud)

在渲染功能中,我可以看到所有对象,包括最喜欢的对象

console.log(data.map((e) => e));
Run Code Online (Sandbox Code Playgroud)

但这给出了一个未定义的数组

console.log(data.map((e) => e.favourite));
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

javascript arrays json reactjs

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