javascript - react : Make components external

标签 javascript reactjs webpack components

我一直在努力学习 React,因此阅读了官方指南,但是,我不确定如何将组件放入它们自己的文件中以跨文件重用它们。

我制作了一个非常基本的 React 组件,它包含一个 input 标签和一些配置。我想让这个输入标签在它自己的文件中成为一个独立的组件。我如何实现这一点?

我在这个配置下使用 Webpack:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ],
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['react-hot', 'babel'],
      include: path.join(__dirname, 'src')
    }]
  }
};

这是 React 代码:

import React, { Component } from 'react';

export default React.createClass({
  getInitialState: function() {
    return {text: ''};
  },
  handleChange: function(e) {
    this.setState({text: e.target.value})
  },
  render() {
    return (
      <div>
        <h1>What's your name?</h1>
        <input 
            type="text" 
            value={this.state.text} 
            onChange={this.handleChange}
        />
        <h2>Hallo, {this.state.text}</h2>
      </div>
    );
  }
});

编辑:我忘记了 index.js:

import React from 'react';
import { render } from 'react-dom';
import App from './Components/App';

render(<App />, document.getElementById('root'));

谢谢。

最佳答案

您需要创建一个输入组件并将您的状态和处理更改功能作为 Prop 传递给该组件。

输入组件:

import React, {Component} from 'react';

var Input = React.createClass({
  handleChange: function(e) {
    this.props.handleChange(e.target.value);
  }

  render() {
    return (
      <input
        type="text"
        value={this.props.text}
        onChange={this.handleChange} />
    )
  }
});
export default Input;

您当前的组件(添加了输入组件):

import React, { Component } from 'react';
import Input from './path_to_inputComponent';

export default React.createClass({
  getInitialState: function() {
    return {text: ''};
  },
  handleChange: function(text) {
    this.setState({text: text})
  },
  render() {
    return (
      <div>
        <h1>What's your name?</h1>
        <Input text={this.state.text} handleChange={this.handleChange} />
        <h2>Hallo, {this.state.text}</h2>
      </div>
    );
  }
});

那么将会发生的是,this.state.text 将作为文本属性传递给 Input,它将设置输入的值。这将允许输入组件在多个地方使用,并且在每个使用它的地方都有不同的 value。此外,当从输入触发 onChange 事件时,它将调用作为 prop 传递给它的 handleChange 函数。因此,它会调用父组件中的函数,并在父组件中更新状态。

关于javascript - react : Make components external,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38379550/

相关文章:

javascript - 制作一个固定位置的div

reactjs - 带有 Material UI 的对话框上方的 Snackbar

javascript - 哈巴狗 + webpack-dev-server

Javascript 提交不包含提交按钮值

javascript - 在功能 block 中管理特殊 "this"对象的属性

javascript - 为什么我会收到 TypeError : this. getToken is not a function - React JS

reactjs - Redux、 react 、 typescript : Connect returns view class which requires props

Webpack 开发服务器引导两次

javascript - 构建元素时重写sass url

javascript - 使用 Facebook Open Graph API 创建对象