【问题标题】:How do you add redirect after QR code scan二维码扫描后如何添加重定向
【发布时间】:2021-10-08 10:29:14
【问题描述】:

我有一个扫描二维码的二维码应用程序,它可以工作。我想在扫描成功后添加重定向操作。

这是我的代码

import React, {Component} from "react";
import ReactDOM from 'react-dom';
import { Redirect } from "react-router-dom";
import BarcodeScannerComponent from "react-qr-barcode-scanner";


class QR extends Component {


      constructor(props) {
        super(props);
        this.state = {
          data: "Not Found"
        };
      }

    render() {
        return (
   
          <>
          <BarcodeScannerComponent
            width={500}
            height={500}
            onUpdate={(err, result) => {
              if (result) {
                this.setState({data: result.text});
         
                return <Redirect to={this.state.data} />
                
              }
              else this.setState({data: "Not Found"});
            }}
            
          />
          <p>{this.state.data}</p>
        </>

        );
      }

}


ReactDOM.render(
    <QR />,
    document.getElementById('qr-id')
);

虽然在成功扫描后,不会发生重定向。有人可以指出在反应中进行重定向的好方法吗?

【问题讨论】:

  • 使用其他方式重定向(const history = useHistory();history.push(url);)或有条件地渲染它:{this.state.data !== "Not Found" &amp;&amp; &lt;Redirect to={this.state.data} /&gt;},而不是在事件处理程序中返回它(这绝对什么都不做)
  • 我有条件地渲染了虽然不知道为什么我得到一个错误“不变失败”,{this.state.data !==Not Found ? ( &lt;Redirect to={this.state.data} /&gt; ) : (&lt;p&gt;{this.state.data}&lt;/p&gt; )}

标签: javascript reactjs redirect react-router


【解决方案1】:

useHistory hook 可以重定向到路由

import React, { useState, useEffect } from "react";
import ReactDOM from 'react-dom';
import { useHistory } from "react-router-dom";
import BarcodeScannerComponent from "react-qr-barcode-scanner";
const QR = () => {
    const { data, setData } = useState('Not Found');
    const history = useHistory();
    useEffect(()=>{
        if(data==='Not Found') {
            return;
        }
        history.push(data);
    }, [data])
    return
    <>
        <BarcodeScannerComponent
            width={500}
            height={500}
            onUpdate={(err, result) => {
                if (result) {
                    setData(result.text);
                }
                else setData("Not Found");
            }}

        />
        <p>{data}</p>
    </>
}

【讨论】:

  • 我应该在哪里调用这个函数?
  • 不是函数而是函数组件。用作 React 组件。
  • @ÁronPopAdorján 等效类是componentDidUpdate。您也不能在 afaik 类中使用useHistory()。这个答案使用函数式 React,而不是基于类的 React。
  • 很抱歉我刚接触反应钩子的基本问题,我没有错过 QR 函数中的渲染函数吗?
  • @ÁronPopAdorján QR 函数只是一个渲染函数
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 2022-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2022-07-20
相关资源
最近更新 更多