有没有办法在新标签页中打开React组件的相同实例?

罗罗诺阿

我的主页上有一个复杂的react组件。我没有使用redux。单击按钮后,我想在新选项卡中打开带有一些新道具的react组件的相同实例。问题是我不确定如何保持它们同步。

假设我的组件状态中有一个数组,并且正在组件中显示该数组的内容。现在,根据用户的输入,我将修改数组。我希望更新的数组也显示在新选项卡中打开的组件中。

class App extends Component{
    constructor(props){
        this.state = {arr = []};
    }

    handleUserInput = arr => {
        //make changes to arr
        this.setState({ arr });
    };


    render(){
        return(
            // code to call this.handleUserInput()
            <button href="/newtab" target="_blank"> </button>
            {arr} //display the array here
            .......
        )
    }
}

场景如下:

  1. 我将在主页上显示该组件,并且用户可以在其中输入一些内容,基于此,组件状态中的arr会发生变化。
  2. 当用户单击按钮时,应在新标签页中打开相同的组件,其中url将以“ / newtab”结尾。
  3. 当两个选项卡都打开时,并且当用户在主页上向组件输入某些内容并触发arr中的更新时,我希望更新的arr自动反映在“ / newtab”中的组件中

我正在使用像这样的反应路由:

const routing = (  
    <Router>  
        <Route exact path="/" component={App} />  //user inputs something on this instance of App and arr from this App instance will be updated
        <Route exact path="/newtab" component={App additionalProps={additionalProps} />  // I want the updated arr from the App instance on the main page to show up here.
    </Router>  
  )

ReactDOM.render(routing, document.getElementById('root'));

我清楚地了解,通过这种使用react-router在新选项卡中打开组件的方法,我实际上是在新选项卡中打开App组件的新实例,这使App组件位于主页和App组件上在“ / newtab”页面上完全不相关。

  1. 我想知道是否有一种方法可以在位于不同选项卡上的这两个组件之间共享状态。我正在实施本地存储方法。(要么)
  2. 有没有一种方法可以使react-router在新选项卡中打开App组件的同一实例,从而只有一个实例?如果可能的话,将新道具传递到在“ / newtab”处打开的组件会不会有任何问题?
  3. 使用redux可以解决我的问题吗?

如果我不清楚在任何地方以及是否可以为您提供更多信息,请告诉我。非常感谢你。

马德拉恩

您对React的理解有些偏斜-您无法打开组件的“同一实例”,因为组件没有呈现给DOM。组件被转换为HTML元素,因此两个不同的页面具有两个不同的DOM元素-它们无法共享。

您想要做的是在两个标签之间共享状态。

React不支持此功能,一个新选项卡是一个新应用程序,它是一个完全独立的实例。

在同一浏览器中打开的两个应用实例之间共享状态的唯一方法是使用第三方/外部API。

例如,您可以将您的应用程序连接到浏览器的本地存储。这意味着该应用程序的两个实例将共享相同的本地存储数据。请务必谨慎,因为您不得将任何敏感数据(即用户详细信息,密码,银行详细信息,访问令牌)存储在本地存储中,因为它容易受到XSS和其他攻击的影响。

这里有一个有关如何执行此操作指南(作者使用Redux),但是我敢肯定您不需要使用Redux来实现此目的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法在IntelliJ的新标签页中打开所有git更改的文件?

来自分类Dev

有没有办法在IntelliJ的新标签页中打开所有git更改的文件?

来自分类Dev

有没有办法知道哪个现有标签页在Firefox中打开了一个新标签页?

来自分类Dev

有没有办法找出标签页已打开多长时间或标签页何时打开?

来自分类Dev

有没有办法在Android中自动打开浏览器标签?

来自分类Dev

有没有办法在Chrome中将多个标签页移动到新的浏览器窗口?

来自分类Dev

有没有办法在Chrome中将网页上的所有链接打开到其自己的标签中?

来自分类Dev

有没有办法通过文本获取标签页

来自分类Dev

有没有办法以不同的方式编辑列表中相同子字符串的两个实例?

来自分类Dev

有没有办法用相同的选项验证 html 中的 2 个选择标签?使用 JavaScript

来自分类Dev

有没有办法使用可用的 API 打开 AWS 实例

来自分类Dev

有没有办法在gitlab的索引页中显示所有子Wiki?

来自分类Dev

有没有办法在ctags中使用相同的标签名称?

来自分类Dev

有没有办法在TypeScript中实例化受约束的泛型类型的实例?

来自分类Dev

打开新程序时,有没有办法使当前窗口保持活动状态?

来自分类Dev

有没有办法中止线程然后用新变量再次打开它?

来自分类Dev

有没有办法将所有具有相同基本URL段的URL路由到Gatsby中的同一页面?

来自分类Dev

有没有办法列出工作表中有多页的表单中的所有文本框,组合框和标签?

来自分类Dev

Aurelia组件。有没有办法在打字稿中访问组件的功能

来自分类Dev

有没有办法从 Python 中更改控制台代码页?

来自分类Dev

有没有办法打开DICOM文件?

来自分类Dev

有没有办法打开任何活动

来自分类Dev

有没有办法在 Opera 上打开 Webex?

来自分类Dev

有没有办法删除重复的标签?

来自分类Dev

有没有办法通过父HTMLDivElement访问React组件返回的函数?

来自分类Dev

有没有办法在测试 React 组件之前模拟 DOM?

来自分类Dev

有没有办法向 Android 应用程序添加 react-native 组件?

来自分类Dev

有没有办法使用react-leaflet添加MultiPolyline组件?

来自分类Dev

React - 有没有办法忽略嵌入的 <style> 标签?

Related 相关文章

  1. 1

    有没有办法在IntelliJ的新标签页中打开所有git更改的文件?

  2. 2

    有没有办法在IntelliJ的新标签页中打开所有git更改的文件?

  3. 3

    有没有办法知道哪个现有标签页在Firefox中打开了一个新标签页?

  4. 4

    有没有办法找出标签页已打开多长时间或标签页何时打开?

  5. 5

    有没有办法在Android中自动打开浏览器标签?

  6. 6

    有没有办法在Chrome中将多个标签页移动到新的浏览器窗口?

  7. 7

    有没有办法在Chrome中将网页上的所有链接打开到其自己的标签中?

  8. 8

    有没有办法通过文本获取标签页

  9. 9

    有没有办法以不同的方式编辑列表中相同子字符串的两个实例?

  10. 10

    有没有办法用相同的选项验证 html 中的 2 个选择标签?使用 JavaScript

  11. 11

    有没有办法使用可用的 API 打开 AWS 实例

  12. 12

    有没有办法在gitlab的索引页中显示所有子Wiki?

  13. 13

    有没有办法在ctags中使用相同的标签名称?

  14. 14

    有没有办法在TypeScript中实例化受约束的泛型类型的实例?

  15. 15

    打开新程序时,有没有办法使当前窗口保持活动状态?

  16. 16

    有没有办法中止线程然后用新变量再次打开它?

  17. 17

    有没有办法将所有具有相同基本URL段的URL路由到Gatsby中的同一页面?

  18. 18

    有没有办法列出工作表中有多页的表单中的所有文本框,组合框和标签?

  19. 19

    Aurelia组件。有没有办法在打字稿中访问组件的功能

  20. 20

    有没有办法从 Python 中更改控制台代码页?

  21. 21

    有没有办法打开DICOM文件?

  22. 22

    有没有办法打开任何活动

  23. 23

    有没有办法在 Opera 上打开 Webex?

  24. 24

    有没有办法删除重复的标签?

  25. 25

    有没有办法通过父HTMLDivElement访问React组件返回的函数?

  26. 26

    有没有办法在测试 React 组件之前模拟 DOM?

  27. 27

    有没有办法向 Android 应用程序添加 react-native 组件?

  28. 28

    有没有办法使用react-leaflet添加MultiPolyline组件?

  29. 29

    React - 有没有办法忽略嵌入的 <style> 标签?

热门标签

归档