Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用param将'Const'ReactJs组件转换为基于类_Javascript_Reactjs_Class_Components - Fatal编程技术网

Javascript 使用param将'Const'ReactJs组件转换为基于类

Javascript 使用param将'Const'ReactJs组件转换为基于类,javascript,reactjs,class,components,Javascript,Reactjs,Class,Components,我一直在改进代码,学习如何使用基于类的组件。对于没有参数的函数,我取得了部分成功。但其余的都没有转化 工作内容: 这个 到 尚未完成的工作: 下面的部件是我卡住的地方。我真的不明白这个参数是如何传递给基于类的方法的。参数在类的构造函数中是否可以作为prop或其他东西使用 const Topic = ({match}) => ( <div> <h3>{match.params.topicId}</h3> </div> ) 下

我一直在改进代码,学习如何使用基于类的组件。对于没有参数的函数,我取得了部分成功。但其余的都没有转化

工作内容:

这个

尚未完成的工作:

下面的部件是我卡住的地方。我真的不明白这个参数是如何传递给基于类的方法的。参数在类的构造函数中是否可以作为prop或其他东西使用

const Topic = ({match}) => (
  <div>
    <h3>{match.params.topicId}</h3>
  </div>
) 
下面还有一个

const Topics = ({match}) => (
  <div>
    <h2>Topics</h2>
    <ul>
      <li>
        <Link to={`${match.url}/rendering`}>
          Rendering with React
        </Link>
      </li>
      <li>
        <Link to={`${match.url}/components`}>
          Components
        </Link>
      </li>
      <li>
        <Link to={`${match.url}/props-v-state`}>
          Props v. State
        </Link>
      </li>
    </ul>

    <Route path={`${match.url}/:topicId`} component={Topic}/>
    <Route exact path={match.url} render={() => (
    <h3>Please select a topic.</h3>
  )}/>
  </div>
)

要将函数组件转换为类组件,请执行以下操作:

将所有内容从函数组件的主体移动到类组件的渲染方法。如果主体是JSX本身,只需从render方法返回它。 通过分解this.props,将需要的props分配给常量。 注意:对于没有状态或不需要生命周期方法的只查看组件,您应该保留无状态组件

之前的主题:

转换后的主题:


要将函数组件转换为类组件,请执行以下操作:

将所有内容从函数组件的主体移动到类组件的渲染方法。如果主体是JSX本身,只需从render方法返回它。 通过分解this.props,将需要的props分配给常量。 注意:对于没有状态或不需要生命周期方法的只查看组件,您应该保留无状态组件

之前的主题:

转换后的主题:


为了扩展Ori Drori的解决方案,这是完全正确的,我想给你们一些组件组成的更多上下文,以了解道具来自何处,这些还没有得到回答

假设您有一个主题组件和一个主题组件列表。组件能够呈现其他组件,因此主题可以呈现许多主题组件

考虑到这一点,假设我们的出发点是主题:

class Topics extends React.Component {
    // In a typical single page application you will receive topics from outside, for example from a REST API.
    const topics = [{
        name: "Topic1",
        id:   1
    }, {
        name: "Topic2",
        id:   2
    }];

    render() {
        return (
            <div>
                {
                    topics.map(topic => <Topic 
                        name={topic.name}
                        topicId={topic.id}
                    />)
                }
            </div>
        );
    }
}
这个话题看起来和Ori Drori的答案完全一样


当您的应用程序增长了如此多的依赖项和属性冒泡时,似乎是一种很好的组合组件的方法可能会变得非常困难,特别是因为您需要在多个组件层之间进行大量数据转换。这就是Redux或React Baobab的用武之地,它提供了一种将数据转换以及状态转换从组件中移除到集中模块(状态)的方法。

为了扩展Ori Drori完全正确的解决方案,我想给您一些组件组合的更多上下文,以了解道具的来源尚未得到回答

假设您有一个主题组件和一个主题组件列表。组件能够呈现其他组件,因此主题可以呈现许多主题组件

考虑到这一点,假设我们的出发点是主题:

class Topics extends React.Component {
    // In a typical single page application you will receive topics from outside, for example from a REST API.
    const topics = [{
        name: "Topic1",
        id:   1
    }, {
        name: "Topic2",
        id:   2
    }];

    render() {
        return (
            <div>
                {
                    topics.map(topic => <Topic 
                        name={topic.name}
                        topicId={topic.id}
                    />)
                }
            </div>
        );
    }
}
这个话题看起来和Ori Drori的答案完全一样


当您的应用程序增长了如此多的依赖项和属性冒泡时,似乎是一种很好的组合组件的方法可能会变得非常困难,特别是因为您需要在多个组件层之间进行大量数据转换。这就是Redux或React Baobab的用武之地,它提供了一种将数据转换以及状态转换从组件中移除到集中模块(状态)的方法。

感谢您的解释@谢谢你的解释@托拜厄斯
const Topic = ({match}) => (
  <div>
    <h3>{match.params.topicId}</h3>
  </div>
) 
class Topic extends React.Component {
  render() {
    const { match } = this.props;

    return (
      <div>
        <h3>{match.params.topicId}</h3>
      </div>
    );
  }
}
class Topics extends React.Component {
    // In a typical single page application you will receive topics from outside, for example from a REST API.
    const topics = [{
        name: "Topic1",
        id:   1
    }, {
        name: "Topic2",
        id:   2
    }];

    render() {
        return (
            <div>
                {
                    topics.map(topic => <Topic 
                        name={topic.name}
                        topicId={topic.id}
                    />)
                }
            </div>
        );
    }
}