代码之家  ›  专栏  ›  技术社区  ›  Simon Suh

const Component=()=>(<div></div>)是否与const Component=()=>{return(<div></div>)}在React中相同?

  •  2
  • Simon Suh  · 技术社区  · 5 年前

    我猜它们是一样的,因为输出是一样的,但是它是Redux的官方速记还是Javascript属性?我正在跟踪 Redux documentation 有一个组件:

    const App = () => (
      <div>
        <AddTodo />
        <VisibleTodoList />
        <Footer />
      </div>
    )
    

    以及另一个组成部分:

    const AddTodo = ({ dispatch }) => {
      let input
    
      return (
        <div>
          <form
            onSubmit={e => {
              e.preventDefault()
              if (!input.value.trim()) {
                return
              }
              dispatch(addTodo(input.value))
              input.value = ''
            }}
          >
            <input ref={node => (input = node)} />
            <button type="submit">Add Todo</button>
          </form>
        </div>
      )
    }
    

    我想知道这是否与Javascript或React有关。

    我知道在Javascript中,arrow函数需要

    (name, description) => ({name: name, description: description});
    

    在内联的单表达式语法中,它是一个对象而不是一个普通函数,但我不确定在Redux示例中是否适用,因为JSX部分不是一个对象。请帮我纠正错误。

    2 回复  |  直到 5 年前
        1
  •  1
  •   Asaf Aviv    5 年前

    它主要是为了可读性,你可以省略括号,它的功能也一样

    const App = () => 
      <div>
        <AddTodo />
        <VisibleTodoList />
        <Footer />
      </div>
    

    但是,当您在组件中有一个主体并且希望在新行上返回JSX时,您必须用括号括起来以避免ASCI(自动分号插入)

    const App = () => {
      const x = 'something'
    
      return (
        <div>
          <AddTodo />
          <VisibleTodoList />
          <Footer />
        </div>
      )
    }
    
        2
  •  3
  •   wentjun    5 年前

    简而言之,是的,因为JSX和React遵循JavaScript使用的语法,因为JSX只是React的语法扩展。您可以阅读更多关于JSX的内容 here .

    此外,关于redux,您的redux应该完全用JavaScript(或TypeScript)编写,不使用任何JSX语法,因为redux存储的主要目标是维护应用程序的状态,而不是呈现逻辑。