标签: react-dom

渲染为带有上下文的字符串?

我有一个组件(EmailBuilder),它使用react context api来渲染一些东西,我想将其渲染为html,我尝试了这个:

import * as React from 'react'
import { EmailBuilder } from './EmailBuilder';
import ReactDOMServer from 'react-dom/server';

export const EmailBuilderPage = (props: any) => {
    const element = <EmailBuilder />
    return <>
        {element}

        <br />
        <h1>HTML</h1>
        {ReactDOMServer.renderToString(element)}
    </>
}
Run Code Online (Sandbox Code Playgroud)

虽然渲染了元素的根,但它无法渲染上下文 api 对元素的任何更改。

这可能吗?

reactjs react-dom react-context

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

使用 React Router 重定向显示空白页面

我正在尝试构建一个简单的示例项目,其中用户在单击按钮后会使用 React 重定向到“联系”页面。我试图通过设置状态属性的值来实现这一点。当我运行我的代码时,它确实将浏览器地址栏 URL 更改为联系页面的 URL,但似乎并未实际加载该组件 - 我得到的是一个空白页面。如果我手动导航到该 URL ( http://localhost:3000/contact ),我可以看到内容。

这是我的App.jsContact.js文件 -

应用程序.js

import React, { Component } from 'react';
import { BrowserRouter as Router, Switch, Route, Link, Redirect } from 'react-router-dom';
import Contact from './Contact';

class App extends Component {
    state = {
        redirect: false
    }

    setRedirect = () => {
        this.setState({
            redirect: true
        })
    }

    renderRedirect = () => {
        if (this.state.redirect) {
            return <Redirect to='/contact' />
        }
    }

    render() {
        return …
Run Code Online (Sandbox Code Playgroud)

javascript redirect reactjs react-router react-dom

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

React Hooks 和 Enzyme:React 不断告诉我将状态更新包装在 act(...) 中,即使我认为是这样

我一直在自学如何使用enzyme和测试 React 组件jest,但我对如何测试使用 React hooks 的已安装组件一无所知。

这是该组件的简化版本......

  const [records, setRecords] = useState([]);

  const onChange = async ({ value }) => {
    try {
      const request = await searchRecords();

      console.log("Before setRecords");

      setRecords(request.results);

      console.log("After setRecords");
    } catch (error) {  /* error handling */ }
  }

Run Code Online (Sandbox Code Playgroud)

测试代码看起来像...

let wrapped;

describe("Sample", () => {
  beforeEach(() => {
    jest.clearAllMocks();
    wrapped = mount(
      <Provider store={createStore(reducers, {})}>
        <Sample />
      </Provider>
    );
    api.mockImplementation(() => ({ results: searchResult }));
  });

  afterEach(() => { …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs react-dom enzyme react-hooks

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

package.json devDependency 和peerDependency 中重复相同的依赖项?

我目前正在构建 React UI 组件包,该组件包将发布到 NPM。

我按照应有的方式将 React 和 ReactDOM 添加到对等依赖项中。然而,在我的库中,我依赖于类似的模块,react-dates也有 React 作为对等模块。

当我npm i在包内执行此操作时,我收到了很多这样的警告,这些警告污染了我的终端:

warning " > react-dates@21.2.0" has unmet peer dependency "react@^0.14 || ^15.5.4 || ^16.1.1".
warning " > react-dates@21.2.0" has unmet peer dependency "react-dom@^0.14 || ^15.5.4 || ^16.1.1".
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我决定还添加 React 和 ReactDOM devDependencies,警告就消失了。

dev您认为这是在和中重复依赖项的好方法吗peer

node.js npm node-modules reactjs react-dom

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

React - 通过单击按钮获取输入的值

我需要实现一个搜索按钮来搜索输入的值。我知道如何向按钮添加 onClick listener(这是名称吗?),以便它fires(是表达式?) 成为一个函数。

但在函数内,我不知道如何get输入值。

这是我得到的:

function App() {
  const [query, setQuery] = useState('')
  const [page, setPage] = useState(1)
  const { jobs, loading, error } = useFetchJobs(query, page)

  function handleSearch(e) {
    setQuery(???)
    setPage(1)
  }

  return (
    <Container className="my-4">
      <input type="text"></input>
      <button onClick={handleSearch}>search</button>    
    </Container>
  );
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的。我在google上找到的一行代码。我明白了Error: Function components cannot have string refs

function App() {
  function handleSearch(e) {

    setQuery(React.findDOMNode(this.refs.search).value.trim())
    setPage(1)
  }

  return (
    <Container className="my-4">
      <input type="text" ref="search" ></input>
      <button onClick={handleSearch}>search</button>
    </Container>
  );
}
Run Code Online (Sandbox Code Playgroud)

reactjs react-dom

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

React JS TypeError:无法读取 areHookInputsEqual 处未定义的属性“长度”

我在使用“react-dom/server”中的renderToString在 SSR 上渲染某些 URL 时遇到一些错误

\n

我收到以下错误:

\n
TypeError: Cannot read property 'length' of undefined\nat areHookInputsEqual (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:992:38)\nat Object.useMemo (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:1230:13)\nat useMemo (C:\\projects\\spd-web-app1\\node_modules\\react\\cjs\\react.development.js:1521:21)\nat Provider (C:\\projects\\spd-web-app1\\node_modules\\react-redux\\lib\\components\\Provider.js:22:41)\nat finishHooks (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:1077:16)\nat processChild (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:3046:14)\nat resolve (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:2962:5)\nat ReactDOMServerRenderer.render (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:3437:22)\nat ReactDOMServerRenderer.read (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:3375:29)\nat renderToString (C:\\projects\\spd-web-app1\\node_modules\\react-dom\\cjs\\react-dom-server.node.development.js:3990:27)\n
Run Code Online (Sandbox Code Playgroud)\n

我发现的是,在react-dom-server.node.development.js \xe2\x86\x92 createWorkInProgressHook()

\n

我得到下面的对象,其中memoizedState不是数组。

\n
{\n  memoizedState: 0,\n  queue: { last: null, dispatch: [Function: bound dispatchAction] },\n  next: {\n    memoizedState: { current: [QueryData] },\n    queue: null,\n    next: { memoizedState: [Object], queue: null, next: [Object] }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n …

reactjs server-side-rendering react-dom react-dom-server react-hooks

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

type="text/babel" 的外部脚本不起作用

为什么 type="text/babel" 的外部脚本在 ReactJS 中不起作用?我将index.html和foo.js放在同一个文件夹中。使用 Google Chrome 打开 index.html 文件后没有任何显示


索引.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <title>ReactJS</title>
        <script src="https://unpkg.com/react@17/umd/react.development.js"></script>
        <script src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
        <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
        <script type="text/babel" src="foo.js"></script>
    </head>
    <body>

        <div id="root"></div>
        
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

foo.js

ReactDOM.render(
  <h1>Hello World</h1>,
  document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)

reactjs babeljs react-dom

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

未捕获的类型错误:无法将属性“__h”设置为 null

使用这些别名时出现此错误。你能帮助我吗?谢谢!

Uncaught TypeError: Cannot set property '__h' of null
    at hooks.module.js:1
    at Array.forEach (<anonymous>)
    at x (hooks.module.js:1)
(anonymous) @   hooks.module.js:1
x   @   hooks.module.js:1
Run Code Online (Sandbox Code Playgroud)

“预反应”:“^10.5.12”

Webpack别名代码!

resolve: {
    alias: {
      "react": "preact/compat",
      "react-dom": "preact/compat"
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs webpack react-dom preact

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

转换到 React.lazy 加载组件时闪烁

在此仓库中:https://github.com/tlg-265/react-app-vanilla

$ git clone https://github.com/tlg-265/react-app-vanilla
$ cd react-app-vanilla
$ yarn
$ yarn start
Run Code Online (Sandbox Code Playgroud)

我有一个只有 3 页的虚拟应用程序:{ Page1, Page2, Page3 }

我的目标是:分割和延迟加载Page3并防止过渡时闪烁。

Page2使用我现有的代码,分割和延迟加载效果很好,但从 转换到时会出现闪烁Page3

以下是一些主要文件:

React-app-vanilla/src/App.js

import React, { Suspense } from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import { ReactLazyPreload } from './utils/Functions';
import './App.css';

import Page1 from './components/Page1';
import Page2 from './components/Page2';
const Page3 = ReactLazyPreload(() => import(/* webpackChunkName: "page-3" */ './components/Page3'));

function App() { …
Run Code Online (Sandbox Code Playgroud)

lazy-loading reactjs react-router react-dom react-router-dom

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

React、Jest 和测试库:TypeError:使用 findBy(例如 findByAltText)时无法读取 null 的属性“createEvent”

问题

当我尝试使用 Jest、React 和测试库运行测试时,npm test出现以下错误:

错误

/node_modules/react-dom/cjs/react-dom.development.js:3905
      var evt = document.createEvent('Event');
                         ^

TypeError: Cannot read property 'createEvent' of null
    at Object.invokeGuardedCallbackDev (/node_modules/react-dom/cjs/react-dom.development.js:3905:26)
    at invokeGuardedCallback (/node_modules/react-dom/cjs/react-dom.development.js:4056:31)
    at flushPassiveEffectsImpl (/node_modules/react-dom/cjs/react-dom.development.js:23543:11)
    at unstable_runWithPriority (/node_modules/scheduler/cjs/scheduler.development.js:468:12)
    at runWithPriority$1 (/node_modules/react-dom/cjs/react-dom.development.js:11276:10)
    at flushPassiveEffects (/node_modules/react-dom/cjs/react-dom.development.js:23447:14)
    at Object.<anonymous>.flushWork (/node_modules/react-dom/cjs/react-dom-test-utils.development.js:992:10)
    at Immediate.<anonymous> (/node_modules/react-dom/cjs/react-dom-test-utils.development.js:1003:11)
    at processImmediate (node:internal/timers:464:21)
/node_modules/react-dom/cjs/react-dom.development.js:3905
      var evt = document.createEvent('Event');
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs react-dom react-testing-library

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