标签: react-fragment

React 子渲染函数中的早期返回:返回 null、[] 或 React.Fragment?

假设我有一个简单的组件,它可能会或可能不会呈现计数器。

React 中表达阻塞代码路径的最佳实践是什么?如果它返回null[]Fragment

class App extends Component {
  renderCounter() {
    if (!this.props.shouldRenderCounter) {
      // // which should I return?
      // return; 
      // return null; 
      // return []; 
      // return <React.Fragment />; 
    }
    return <Counter />;
  }

  render() {
    return (
      <div>
        {this.renderCounter()}
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为null是最清楚的,但我可以想象如果返回函数周围的上下文需要一个组件,它会导致问题。[]Fragment这两个看似细微的选项对我来说,除了片段是更容易一些阅读。有什么不同?

reactjs react-fragment

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

检查孩子是否是React.Fragment

我认为React.isFragment目前仅是一个建议:https : //github.com/facebook/react/issues/12038

是否有解决方法来做类似的事情

if (child instanceof React.Fragment) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

直到该API可用。

适用于我的临时解决方案:

const isReactFragment = child => {
  try {
    return child.type.toString() === React.Fragment.toString();
  } catch (e) {
    return false;
  }
};
Run Code Online (Sandbox Code Playgroud)

reactjs react-fragment

9
推荐指数
2
解决办法
1471
查看次数

什么时候使用React.Fragments?

我刚刚了解了React Fragments。

我了解到,通过创建更少的树节点,片段可以稍微提高效率,并且在查看检查器时可使片段更整洁,但是那为什么我们还要在React组件中用作容器?我们应该始终在组件中使用React.Fragments吗?

使用片段会增加样式难度吗?(我不确定,因为我还没有尝试过)。

javascript reactjs react-fragment

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

如何检查 React 元素是否会渲染任何内容

假设我正在制作一个包装器组件,它只在传入一些子节点时才呈现自身:

const Wrapper = ({children}) => {
  if (!children) return null
  return <div>{children}</div>
}
Run Code Online (Sandbox Code Playgroud)

问题是它children可能是Fragment包含空值或空值数组。或包含片段的片段包含...

<Wrapper>hey</Wrapper> // renders <div>hey</div> 
<Wrapper>{null}</Wrapper> // renders nothing 
<Wrapper>{[null]}</Wrapper> // renders <div/> 
<Wrapper><React.Fragment>{null}</React.Fragment></Wrapper> // renders <div/> 
Run Code Online (Sandbox Code Playgroud)

有没有一种规范的方法来检查所有这些条件?

reactjs react-fragment

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

如何根据当前 url / url 片段呈现不同的消息

在这里,我返回当前的 react dom 内容:

  return (
    <React.Fragment>
      {inProduction ? null : <CP.Dev/>}
      <CP.Snackbar
        {...p as any}
      />
      <Router history={browserHistory}>
        <Switch>
          <Route path="/login" component={Login} />
          <Route path="/signup" component={Signup} />
           {authRoutes}
        </Switch>
      </Router>
    </React.Fragment>
  );
Run Code Online (Sandbox Code Playgroud)

所以..Snackbar 组件为每条路线呈现 - 目标:我想要做的是根据网址呈现不同的欢迎消息 - 最好的方法是什么?如何侦听 url 更改,然后根据 url 呈现不同的消息?

或者,我可以用 Snackbar 包装每个组件,然后将一个键硬编码到不同的消息,但这似乎没有必要。

reactjs react-router react-fragment

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

<React.Fragment>或<> </>上的流错误,但不是<Fragment>

我使用的是react v16.3.0flow-bin v0.69.0

使用反应片段<React.Fragment>或其中的任何一种或<></>类似的速记语法

import React from 'react'

const ComponentA = () => (
  <React.Fragment>
    <div>Component</div>
    <div>A</div>
  </React.Fragment>
)

const ComponentB = () => (
  <>
    <div>Component</div>
    <div>B</div>
  </>
)
Run Code Online (Sandbox Code Playgroud)

流程抱怨以下错误(两者都是一个混淆错误,只是在ComponentA这里显示输出)

Cannot get React.Fragment because property Fragment is missing in object type [1].

  24? const ComponentA = () => (
  25?   <React.Fragment>
  26?     <div>Component</div>
  27?     <div>A</div>
  28?   </React.Fragment>

 /private/tmp/flow/flowlib_2349df3a/react.js
 251?   declare export default {|
 252?     +DOM: typeof DOM,
 253?     +PropTypes: …
Run Code Online (Sandbox Code Playgroud)

reactjs flowtype react-fragment

5
推荐指数
2
解决办法
4681
查看次数

你可以在 React.Fragment 上使用 props 吗?

我知道 React Fragment 可用于对子组件进行分组,如下所示:

render() {
  return (
    <React.Fragment>
      <Foo />
      <Bar />
      <Baz />
    </React.Fragment>
  );
}
Run Code Online (Sandbox Code Playgroud)

但是你可以给它添加道具吗?假设您要使用扩展运算符:

<React.Fragment {...otherProps}>
  ...
</React.Fragment>
Run Code Online (Sandbox Code Playgroud)

reactjs react-props react-fragment

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