小编dmw*_*268的帖子

单击时,React会阻止嵌套组件中的事件冒泡

这是一个基本组件.无论是<ul><li>拥有的onClick功能.我只想点击on on <li>,而不是<ul>.我怎样才能做到这一点?

我打得四处e.preventDefault(),e.​​stopPropagation(),但没有成功.

class List extends React.Component {
  constructor(props) {
    super(props);
  }

  handleClick() {
    // do something
  }

  render() {

    return (
      <ul 
        onClick={(e) => {
          console.log('parent');
          this.handleClick();
        }}
      >
        <li 
          onClick={(e) => {
            console.log('child');
            // prevent default? prevent propagation?
            this.handleClick();
          }}
        >
        </li>       
      </ul>
    )
  }
}

// => parent
// => child
Run Code Online (Sandbox Code Playgroud)

onclick event-propagation reactjs

85
推荐指数
6
解决办法
6万
查看次数

React Functional组件:作为函数和作为组件调用

说我有一个功能组件:

const Foo = (props) => ( <div>{props.name}</div> );
Run Code Online (Sandbox Code Playgroud)

直接将其作为函数调用有什么区别:

const fooParent = () => (
    <div> {Foo({ name: "foo" })} </div>
)
Run Code Online (Sandbox Code Playgroud)

而将其称为组件:

const fooParent = () => (
    <div> <Foo name="foo"/> </div>
)
Run Code Online (Sandbox Code Playgroud)

我最感兴趣的是性能影响,React如何在内部对待它们,以及在React Fiber中可能会有什么不同,在那里我听到功能组件的性能提升.

javascript reactjs

15
推荐指数
4
解决办法
4461
查看次数

React.lazy 和预取组件

我有一个 2 步应用程序流程,如下所示:

const Step1 = React.lazy(() => import('./Step1'));
const Step1 = React.lazy(() => import('./Step2'));

<Suspense fallback={<Loading />}>
  <Route path="/step1" render={() => <Step1 />} />
  <Route path="/step2" render={() => <Step2 />} />
</Suspense>
Run Code Online (Sandbox Code Playgroud)

使用 React.lazy,我可以<Step2 />在用户打开时延迟加载<Step1 />,这可以改善初始页面加载。但是,我想<Step2 />在用户开启时预取<Step1 />作为优化。是否有使用 React.lazy 执行此操作的 API?

编辑:

详细说明 - 我正在使用路由器来呈现两步表单。最初,用户将从 开始/step1。用户完成<Step1 />他们中的所有任务后,他们将被路由到 path /step2。此时路由器将渲染<Step2 />组件。

我在问是否有一种模式可以<Step2 />在用户仍在使用时预取<Step1 />

reactjs code-splitting

3
推荐指数
1
解决办法
4097
查看次数

在闭包中使用类或函数的方法

假设我想用一些方法创建一个Simple React组件(没有状态或生命周期方法).我可以通过以下两种方式之一做到:

// Foo.js
class Foo extends React.Component {
  doSomething() {
    // do something
  }

  render() {
    ...
    this.doSomething();
    ...
  }
}
export default Foo;
Run Code Online (Sandbox Code Playgroud)

或者我可以这样做:

// Foo.js
const doSomething = () => {
  // do something...
}

const Foo = () => {
  ...
  doSomething();
  ...
}
export default Foo;
Run Code Online (Sandbox Code Playgroud)

第二个是优选的,因为它是一个功能组件(更简单,开销更少),但是闭包功能是否会带来内存泄漏的任何开销/风险?

通常,如果组件不保持状态或使用生命周期方法,这是实现组件的首选方法?

javascript closures reactjs

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

BigDecimal#compareTo 具有不同的比例

为什么以下返回1

new BigDecimal(0.82).setScale(5, BigDecimal.ROUND_HALF_DOWN)
    .compareTo(new BigDecimal(0.82))
Run Code Online (Sandbox Code Playgroud)

我希望这会返回,0因为根据其文档BigDecimal.compareTo 忽略了比例

将此BigDecimal与指定的BigDecimal. 值相等但具有不同比例(如和)的两个BigDecimal对象被此方法视为相等。[...]2.02.00

java bigdecimal

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