React Web App Routing 适用于桌面(包括移动开发视图),但不适用于移动浏览器

Posted

技术标签:

【中文标题】React Web App Routing 适用于桌面(包括移动开发视图),但不适用于移动浏览器【英文标题】:React Web App Routing Works on Desktop (incl. Mobile Dev View), but not on Mobile Browsers 【发布时间】:2020-06-15 01:58:37 【问题描述】:

我真的被我正在构建的 React Web 应用程序的问题所困扰。我正在使用 array.map() 方法来动态创建下拉列表,我发现一切都在桌面浏览器上运行良好(包括在 Chrome 开发工具的移动视图中),但在实际的移动浏览器上却没有。非常感谢您的想法!

预期行为

我希望填充下拉列表,通常来自对象数组。然后,当用户单击下拉菜单中的一个项目时,它将触发 (1) 一个函数或 (2) 到 React 应用程序另一部分的链接。请注意,我使用 react-router-dom 来处理路由。

在移动浏览器上观察到的行为

下拉列表填充正确,但当我从选项中进行选择时它们会出现故障(参见图 1)。

当下拉选择同时触发(react-router-dom 组件)并调用函数时,可以观察到此行为。在有限的情况下,当函数被正确调用时,正确的参数被传递并且函数确实正确执行。

代码片段

这是我用来生成链接列表的代码示例。它是一个简单的 React 功能组件,用作我应用中所有设置页面的标题,以及组件是React MaterializeCSS 库的一部分,它似乎工作正常。:

const SettingsHeader = () => 

    let  url  = useRouteMatch();
    
    const  userAccess, styleItem, headerStyle, updateHeader, theme  = useContext(SettingsContext);

    const options = userAccess.length ? (
      userAccess.sort().map(permission => 
        // Returns an object with details needed to build the component via a Settings Context function.
        let details = styleItem(permission);
        return (
          <Link
            key=permission
            to=`$url$details.link`
            onClick=() => updateHeader(permission)
          >
            <Icon className=theme.text>details.icon</Icon>
            <span className=theme.text> details.text</span>
          </Link>
        );
      )
    ) : (
      <h4 className="grey-text">
        <Icon>warning</Icon> You don't have permission to edit any settings.
      </h4>
    );
    
    return (
      <h4 className=theme.text>
        <i className="material-icons">headerStyle.icon</i> headerStyle.text
        <Dropdown
          options= ... 
          trigger=
            <Button className="right " + theme.themeColor node="button">
              Views
            </Button>
          
        >
          options
          <a href="#!">
            <Icon className="grey-text">close</Icon>
            <span className="grey-text"> Close</span>
          </a>
        </Dropdown>
      </h4>
    );

这是我用来生成主题选项列表的代码示例,每个主题选项都调用我在应用程序的许多地方使用的 React 上下文组件中的一个函数:

const ThemeSettings = () => 

  // Brings in Theme update function from SettingsContext
  const  changeTheme, theme  = useContext(SettingsContext);

  // Array of possible themes.
  const themesList = ['Burnt Orange', 'Chrome', 'Deep Purple', 'Earth', 'Fresh Green', 'Green', 'Maroon', 'Navy', 'Pink', 'Red', 'Royal Blue', 'Teal']

  const themeOptions = themesList.map(theme => 
    let themeObject = getTheme(theme);

    return (
      <a href="#!" key=theme onClick=(e) => changeTheme(e, theme) >
        <Icon className=themeObject.text>style</Icon>
        <span className=themeObject.text> theme</span>
      </a>
    )
  );

  return (
    <Dropdown
      options= ... 
      trigger=
        <Button className="left " + theme.themeColor node="button">
          Themes
        </Button>
      
    >
       themeOptions 
      <a href="#!">
        <Icon className="grey-text">close</Icon>
        <span className="grey-text"> Close</span>
      </a>
    </Dropdown>
  );

非常感谢您看一下!

【问题讨论】:

【参考方案1】:

这是一个known MaterializeCSS 错误,适用于运行 ios-13 的设备。

在撰写本文时,我只能找到一种可用的解决方法,Falk 在this issue thread 中提到:

要修复它,我必须检查 #v1-dev 分支 https://github.com/Dogfalo/materialize,使用 grunt release 构建它 并为我的项目使用 /dist 文件夹中的 materialize.js。

【讨论】:

这是一个选择问题,提问者正在查询一个下拉问题。它们是 materializecss 中的不同(尽管连接)元素。

以上是关于React Web App Routing 适用于桌面(包括移动开发视图),但不适用于移动浏览器的主要内容,如果未能解决你的问题,请参考以下文章

React Routing 在本地机器上工作,但在 Heroku 上不工作

为什么webpack构建后我的react-routing不起作用?

4.8 Routing -- Specifying The URL Type

SeaJS:一个适用于 Web 浏览器端的模块加载器

vue框架优缺点对比

TypeScript + React + Redux 实战简单天气APP全套完整项目