reactjs怎么从外部引入组件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了reactjs怎么从外部引入组件相关的知识,希望对你有一定的参考价值。

参考技术A 1、Chrome 无法支持,会报错。但是 Firefox 和 Safari 是可以了。记得加上 type="text/babel"。
2、如果想让 Chrome 也能运行,可以开一个本地服务器(比如 Apache),也是可以让 Chrome 支持的。React 文档上也有注明:Note that some browsers (Chrome, e.g.) will fail to load the file unless it's served via HTTP.
3、最后,如果不想开本地服务器。那可以使用模块加载器(webpapck 或 browserify)编译 jsx 代码成 js 再引入就行。
参考技术B 用import 举个例子 你在外框架安装过anr design 到了具体页面那里 用
import input from 'ant' 这样本回答被提问者采纳
参考技术C 1、Chrome 无法支持,会报错。但是 Firefox 和 Safari 是可以了。记得加上 type="text/babel"。

2、如果想让 Chrome 也能运行,可以开一个本地服务器(比如 Apache),也是可以让 Chrome 支持的。React 文档上也有注明:Note that some browsers (Chrome, e.g.) will fail to load the file unless it's served via HTTP.

3、最后,如果不想开本地服务器。那可以使用模块加载器(webpapck 或 browserify)编译 jsx 代码成 js 再引入就行。

如何从 ReactJS 中的外部函数重定向到路由

【中文标题】如何从 ReactJS 中的外部函数重定向到路由【英文标题】:How to redirect to a route from an external function in ReactJS 【发布时间】:2019-05-07 08:21:45 【问题描述】:

这是代表登录页面的组件

import  HttpService  from 'src/assets/js/httpservice';
// ** omissis other imports **

export default class PrivatePage extends React.Component 
    constructor(props) 
        super(props);
    

    public render() 
        return (
            <div>
                <ul>
                    <li>
                        <InputText name="Text" id="Text" />
                    </li>
                    <li>
                        <InputText name="Email" id="Email" />
                    </li>
                    <li>
                        <Button onClick=this.send label="Send ticket" />
                    </li>
                </ul>
            </div>
        )
    

    private send() 
        HttpService.post(PATH.sendTicket, this.state.ticketModel).then(data => 
            if (data.ErrorCode === 0) 
                this.setState(
                    sentSuccessfull: true
                );
            
            else 
                // show an error popup
            
        );
    

当按下“发送票证”按钮时,它会调用HttpService.post 方法进行API 调用以向系统发送票证。正如您在导入部分中看到的,HttpService 托管在外部 JS 文件中。这是HttpService.post方法的代码。

public static async post(path, body) 

    return window.fetch(path, 
        body: JSON.stringify(body),
        cache: "no-cache",
        method: "post"
    )
        .then(data => 
            // call successfull
        )
        .catch(data => 
            if (data.status === 401) 
                // REDIRECT HERE
            
            else 
                return data.json();
            
        );

现在,如果 API 调用因用户未通过身份验证而失败(返回 HTTP 状态 401),我需要将用户重定向到登录页面。我会避免在每个组件中处理 401 HTTP 状态,所以我更喜欢直接在 HttpService.post 方法内进行重定向。

【问题讨论】:

是***.com/questions/2604530/…的重复吗? 不,链接帖子中的问题与我的问题完全不同。 是否有理由在私有发送功能 else 块中在客户端重定向?您将在其中显示错误弹出窗口。例如,您可以在触发重定向的错误弹出窗口上有一个关闭按钮。 @Lloyd 我更喜欢重定向以编程方式进行,无需任何用户交互。 好吧,您仍然可以在客户端以编程方式重定向,如果您在 catch 块服务器端抛出错误,然后添加一个带有重定向的 catch 块客户端。在我回答之前只是想确定是否有其他原因您不希望它出现在客户端,因为最终结果是相同的 【参考方案1】:

试试下面的,让我知道它是否适合你,像这样更改服务器端:

public static async post(path, body) 

    return window.fetch(path, 
        body: JSON.stringify(body),
        cache: "no-cache",
        method: "post"
        )
        .then(data => 
            // call successfull
        )
        .catch(data => 
            // server side redirect below:
            if (data.status === 401) 
              data.redirect(url, 401)
            
            else 
            return data.json();
            
        );

然后客户端执行以下操作:

     private send() 
     const  history  = this.props 
        HttpService.post(PATH.sendTicket, this.state.ticketModel).then(data => 
            if (data.ErrorCode === 0) 
                this.setState(
                    sentSuccessfull: true
                );
            
        ).catch(err => 
          hirstory.push('/your-route-here')
        )
      

或者,如果您不使用 react-router,则可以使用 history.push 而不是使用

location.href = '/your-route-here'

或者类似的东西,但是使用 location.href 方法会清除您的应用程序状态,实际上就像您刷新了页面一样。

如果这有帮助,请告诉我

劳埃德

【讨论】:

我认为您的解决方案与可能的解决方案相同,但如果我将其付诸实践,这意味着我必须在每个 React 组件中处理 401 HTTP 状态进行重定向。我会直接在 httpservice.js 文件中的 post 方法中直接在全局范围内处理 401 状态一次。 好的,我将使用上面的服务器端解决方案进行编辑,请参阅服务器端承诺中的 catch 块。

以上是关于reactjs怎么从外部引入组件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ReactJS 中从“外部”访问组件方法?

如何从定义在和/或动态 id 元素名称的 JS 类外部渲染 ReactJS 组件?

如何从 ReactJS 中的外部函数重定向到路由

ReactJS - store.getState() 未定义

如何在状态更改(父)reactjs时重新渲染子组件

从reactjs中的父组件调用子组件方法