这是一个基本组件.无论是<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) 说我有一个功能组件:
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中可能会有什么不同,在那里我听到功能组件的性能提升.
我有一个 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 />。
假设我想用一些方法创建一个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)
第二个是优选的,因为它是一个功能组件(更简单,开销更少),但是闭包功能是否会带来内存泄漏的任何开销/风险?
通常,如果组件不保持状态或使用生命周期方法,这是实现组件的首选方法?
为什么以下返回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