Material-ui: [TextField] рд░реЗрдВрдбрд░рд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдЦреЛ рджреЗрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2015  ┬╖  41рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mui-org/material-ui

рдпрджрд┐ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдЙрд╕реЗ setState рд╣рд┐рд╕рд╛рдм рд╕реЗ рд░реЗрдВрдбрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдлреЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@scotmatson рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдореИрдВ Container = styled.div рдореБрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдЧреИрд░-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХ div ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдФрд░ рдореИрдВ рдЖрдкрдХреА рдХреБрдВрдард╛рдУрдВ рдХреЛ рднреА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдпрд╣ рдореБрджреНрджрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореБрджреНрджрд╛ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕реНрддреНрд░реА рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕рдордп рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

EDIT2:
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рдереА: рд░реЗрдВрдбрд░-рдореЗрдердб рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯ рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛! рдпрд╣ рд╣рд░ рдкреБрди: рд░реЗрдВрдбрд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХрд╛ рд░реА-рд░реЗрдВрдбрд░ рд╕реАрдорд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд░реА-рд░реЗрдВрдбрд░ рдореБрджреНрджреЛрдВ рдХреА рдУрд░ рднреА рдЕрдЧреНрд░рд╕рд░ рдерд╛ред

рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдореЗрд░реА рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдПрдХ рдЧрд╝рд▓рддреА рдХреА рдЧрд╝рд▓рддреА рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣рд╛рдБ рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдБрдЧрд╛ред

рд╕рднреА 41 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

+1

рдореБрдЭреЗ TextBields рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП defaultValue рдХреЗ рд╕рд╛рде onBlur рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХрд┐рд╕реА рдХреЛ рднреА рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рд╣реИред рдиреАрдЪреЗ рджреЗрдЦреЗрдВ рдХреЛрдб:

//taken from examples/webpack-example

/** In this file, we create a React component which incorporates components provided by material-ui */

const React = require('react');
const RaisedButton = require('material-ui/lib/raised-button');
const TextField = require('material-ui/lib/text-field');
const Dialog = require('material-ui/lib/dialog');
const ThemeManager = require('material-ui/lib/styles/theme-manager');
const LightRawTheme = require('material-ui/lib/styles/raw-themes/light-raw-theme');
const Colors = require('material-ui/lib/styles/colors');

const Main = React.createClass({

  childContextTypes: {
    muiTheme: React.PropTypes.object,
  },

  getInitialState () {
    return {
      muiTheme: ThemeManager.getMuiTheme(LightRawTheme),
      counter: 0,
    };
  },

  getChildContext() {
    return {
      muiTheme: this.state.muiTheme,
    };
  },

  componentWillMount() {
    let newMuiTheme = ThemeManager.modifyRawThemePalette(this.state.muiTheme, {
      accent1Color: Colors.deepOrange500,
    });

    this.setState({muiTheme: newMuiTheme});
  },

  componentDidMount() {
    this.refs.textField.focus();
  },

  render() {

    console.log(this.state.counter);

    let containerStyle = {
      textAlign: 'center',
      paddingTop: '200px',
    };

    let standardActions = [
      { text: 'Okay' },
    ];

    return (
      <div style={containerStyle}>
        <Dialog
          title="Super Secret Password"
          actions={standardActions}
          ref="superSecretPasswordDialog">
          1-2-3-4-5
        </Dialog>

        <h1>material-ui</h1>
        <h2>example project</h2>

        <TextField ref="textField" onChange = {this._incrementStateCounter}/>
        <RaisedButton label="Super Secret Password" primary={true} onTouchTap={this._handleTouchTap} />

      </div>
    );
  },

  _handleTouchTap() {
    this.refs.superSecretPasswordDialog.show();
  },

  _incrementStateCounter () {
    this.setState({counter: this.state.counter + 1});
  },

});

module.exports = Main;


рдпрд╣рд╛рдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрди рдПрдХреНрд╢рди рд╣реИ (рдЕрдкрдбреЗрдЯ рд╕реНрдЯреЗрдЯ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕реЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдЗрдирдкреБрдЯ рдкрд░рд┐рд╡рд░реНрддрди)ред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ TextField рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦрддрд╛ рд╣реИ:

4uo63bzhmj

рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИред @ shaurya947 рдЙрджрд╛рд╣рд░рдг рдиреЗ рдмрдЧ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ TextField рдХреЗ рдкрд╛рд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдереАред
рдЙрдкрдпреЛрдЧ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
<TextField ref="textField" value={this.state.valueToBeEdited} onChange = {this._incrementStateCounter}/>

рдпрд╛

<TextField ref="textField" defaultValue={this.state.valueToBeEdited} onChange = {this._incrementStateCounter}/>

рдореИрдВ рдпрд╣ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдХреНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ TextFields рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ value рдХреА рдкреНрд░реЛрдк TextField , рддреЛ рдпрд╣ рдПрдХ рдирд┐рдпрдВрддреНрд░рд┐рдд рдШрдЯрдХ рд╣реИред

рдореИрдВ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рдирдИ рдЪреЗрддрд╛рд╡рдиреА рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реВрдВ: 'TextField рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рдмрджрд▓ рд░рд╣рд╛ рд╣реИред' рдореБрдЭреЗ рдпрд╣ рджреЗрдЦрдХрд░ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╣рд╛рдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ TextField рдореЗрдВ рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред

рдереЛрдбрд╝рд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ TextField рдХрд╛ рдлрд╝реЛрдХрд╕ рдЦреЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ onBlur рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ isFocused TextField рдЭреВрдареА рд╣реИред рдЕрдЧрд░ рдореИрдВ onBlur рд╣реИрдВрдбрд▓рд░ рдХреЗ рджреМрд░рд╛рди document.activeElement рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реВрдВ (рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕ рдШрдЯрдХ рдиреЗ рдлреЛрдХрд╕ рдЪреБрд░рд╛рдпрд╛ рд╣реИ) рддреЛ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ (рд░реВрдЯ) рдХреЗ рд░реВрдЯ рдХреЛ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдзрдмреНрдмрд╛ рдШрдЯрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдРрдк рдореЗрдВ Menu рдХрд╣реАрдВ рдкрд╣рд▓реЗ MenuItem ред disableAutoFocus рд╕рдВрдкрддреНрддрд┐ рдХреЛ true рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдордирд╛рдЗрдП рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рд╛ рд╣реИ: # 4387ред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ ...

рдЗрд╕реЗ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдореЗрдВ рджреЗрдЦрдХрд░ - рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ redux рдлрд╝рд╛рд░реНрдо рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдЬрдм рдореИрдВ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдБ рддреЛ рдпрд╣ рдкреБрдирдГ-рд░реЗрдВрдбрд░ (redux-form parlance рдореЗрдВ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЛ рд╕реНрдкрд░реНрд╢ рдХрд░рдиреЗ) рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ рдЬреЛ рдлрд╝реЛрдХрд╕ рдЦреЛ рджреЗрддрд╛ рд╣реИред

рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлреЙрд░реНрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд░реЗрдВрдбрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдЖ рд╣реИред

рдЖрдк Table selectable=true рднреАрддрд░ рд╕реЗрдЯ рдХрд░рдХреЗ TextField рдбрд╛рд▓рдХрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рднреА рдЖрдк рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓рд╛рдЗрди рдХреЛ рдлрд╝реЛрдХрд╕ рдорд┐рд▓реЗрдЧрд╛, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рд░рдВрдЧ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ props рд▓рд╛рдЗрди рдХрд╛ selected=true рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЯреНрд░рд┐рдЧрд░, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЖрдк рдзреНрдпрд╛рди рдЦреЛ рджреЗрдВрдЧреЗ ...

рддреЛ рдЖрдк рдореВрд▓ рд░реВрдк рд╕реЗ TextField рдЙрдкрдпреЛрдЧ selectable Table рднреАрддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрд╕реЗ рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ UX рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА :)

рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░, рдореИрдВ рдПрдХ рдкреНрд░рдЬрдирдирдХрд░реНрддрд╛ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо? рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рдЗрдирдкреБрдЯ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдирд╛ред

@ dalexander01 рдХреЛ рдПрдХ "рд╕рдорд╛рдзрд╛рди" рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд redux-form рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ md рдЗрдирдкреБрдЯ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЕрдЧрд░ рдЗрд╕рдХреЗ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧ рд╕реЗ рдореИрдВ рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ!

@deyceg рдХреГрдкрдпрд╛, рдпрд╣ рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ pleaseред рдмрд╕ <Dialog/> рдФрд░ <TextField/> рдЗрд╕ рд╕рдВрдпреЛрдЬрди рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВред

      <Dialog
        open={this.props.showDialog}
        title={'New ' + this.props.type}
        autoScrollBodyContent={true}
        actions={actions}
        bodyStyle={styles.dialogContent}
      >
        <SelectField
          name='sub_type'
          value={this.props.top_card.sub_type}
          onChange={(e, k, payload) => this.props.topCardSelectChange('sub_type', payload)}
          floatingLabelText='Type'
        >
          {menuItemsJSX}
        </SelectField>
        <TextField
          name='title'
          className='story-title'
          value={this.props.top_card.title}
          onChange={this.props.topCardChange}
          floatingLabelText='Title'
          fullWidth={true}
          multiLine={true}
          style={styles.title}
        />
        <TextField />
      </Dialog>

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрд╕ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
...
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдХрд┐рд╕ рддрддреНрд╡ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ рдпрд╛ рдирд╣реАрдВ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рдореЗрдВ textfields рдерд╛ рдЬреЛ myArray.map рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рдХреБрдВрдЬреА рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдореЗрд░реЗ "рдРрд░реЗ" рдкрд░ "рдХреА" рд╣реЛрдиреЗ рд╕реЗ рд░реЗрдпрд░реЗрдВрдбрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб рдЖрдИрдбреА рдмрджрд▓ рдХрд░ рд╢рд╛рд░реНрдЯ.рдЧрдВрдЬреЗрдЯ () рд╣реЛ рдЧрдИ рд╣реИред

    params.map(function(p,i){
        return(
           <div key={i}>              <--- this will always be the same for this particular row.
               <div className='param-inner'>
                   <TextField id={shortid.generate()} value = {p.value} onChange={this.updateParam.bind(this,i)}/>               <-- id here can be random, but it is necessary to avoid browser warning "we don't have enough information..."
                   </div>
               <div className='param-inner'>{p.unit}</div>
           </div>
        )
    }.bind(this));

рдХреЛрдИ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ ( refs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛)? рдпрд╣ onChange рдХрд╛ рд╕рдВрдпреЛрдЬрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ value рдХреЛ рдПрдХ рд░рд╛рдЬреНрдп рдХреБрдВрдЬреА рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЛ рдвреАрд▓рд╛ рдлреЛрдХрд╕ рдмрдирд╛рддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рднреА рдереА, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд┐рд▓реЗрдХреНрдЯ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ SelectField рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓реЗрдиреЗ рд╕реЗ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдПрдХ DropdownMenu https://github.com/callemall/material-ui/blob/ccf712457335087848480709c18c29059542d6aad1/SlectFFF/FlectFMFu рдкрд░ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрд╣ рднреА рдбреНрд░реЙрдкрдбрд╛рдЙрдирдореЗрдиреВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдореЗрдиреВ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рдХреЛ рдлреЛрдХрд╕ рдмреЗрд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо SelectField рд╕реЗ рдПрдХ DropDownMenu рдШрдЯрдХ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдСрдЯреЛрдлреЛрдХрд╕ рдХреЛ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред

out

рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдореБрджреНрджреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░ рд╕рдХрддреА рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЦреБрдж рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ) рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рдЗрд╕рд▓рд┐рдП this.state.value рдмрдЬрд╛рдп рдпрд╣ this.value рдХрд┐ onChange рдЕрдкрдбреЗрдЯ рд╣реЛрдЧрд╛ред рдШрдЯрдХ рдореЗрдВ value рдкреНрд░реЛрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдлрд┐рд░ onChange рд╣реИрдВрдбрд▓рд░ рдкрд░ рдЖрдк e.target.value рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

рдЕрдВрддрд░ рдмрдирд╛рдо рд░рд╛рдЬреНрдп рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд░реНрдЬрди рд░реА-рд░реЗрдВрдбрд░ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рдХрд╛рд░рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдкрд░ рдореЗрд░реА рд╕реБрд╕реНрдд рдкрдХрдбрд╝ рд╣реЛрдЧреАред

рдлрд┐рд░ рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рдХрд╛рдо?

рдореБрдЭреЗ рдЬреЛ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдорд┐рд▓рд╛, рд╡рд╣ рдерд╛ рдЕрдкрдиреЗ рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд▓рд┐рдП shouldComponentUpdate рдлрдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреЗрдЯреНрд╕ рд╡реИрд▓реНрдпреВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ рддреЛ рд╡рд╣ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

`shouldComponentUpdate(nextProps, nextState) {    

    if(nextState.email != this.state.email) {  

      return false;  

    }

    else if(nextState.password != this.state.password) {  

      return false;  

    }  
    else return true;  
    }

`

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдиреЗ рд╕реЗ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдареАрдХ рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд░ рдмрд╛рд░ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдлрд┐рд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдШрдЯрдХ рдкреНрд░рддрд┐рдкрд╛рджрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдСрдирдХреЙрдиреНрдЧ рдЗрд╡реЗрдВрдЯ рдХреЛ рд╕реНрдЯреЗрдЯ рд╡реИрд▓реНрдпреВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реНрдпреБрдХреНрдд рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрдВрдкреЛрдиреЗрдВрдЯ рдкреБрдирдГ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

@ Aspintyl000 рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рдХреБрдЫ рд╣рдж рддрдХред рдЬрдм рдореИрдВ 'рдорд╛рди' рдкреНрд░реЙрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯрдлреАрд▓реНрдб рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЙрд╕ рдкреНрд░реЛрдк рдХреЛ 'this.state.value' рдкрд░ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рддреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореИрдВ рдЗрд╕реЗ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ рдореЗрдВ textfields рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ :( рдХреЛрдИ рдкреНрд░рдЧрддрд┐?

Psid.txt

рдореБрдЭреЗ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рдереАред рд▓реЗрдХрд┐рди ComponentsDidMount () {рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
this.refs.textField.focus ();
}
рдпрд╣ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдЦреЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА <TextField /> рдПрдХ рдореЗрдВ <Table /> ред рдЙрдкрд░реЛрдХреНрдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рддрд░рд╣, рдореИрдВ рдЗрдирдкреБрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди: рдПрдХ onClick рдИрд╡реЗрдВрдЯ рдЬреЛрдбрд╝реЗрдВ , рдЬрдм рдореИрдВ рдЗрд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ selectable=false ред рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЯреЗрдмрд▓ рдХреЗ selectable=true рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП onBlue рдЗрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ред

рдореИрдВрдиреЗ рджреЛ рдЗрдирдкреБрдЯ рдмрдХреНрд╕реЗ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓-рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рдерд╛ред рдмрд╛рд╣рд░реА div рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рдпрд╣ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдПрдХ рднрдпрд╛рдирдХ рджреЛрд╖ рд╣реИред

рддреЛ рдпрд╣ рдПрдХ рдмрд╣реБрдд рднрдпрд╛рдирдХ рдХрд╛рдо рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

`` ``
onSomeValueChanged = рдШрдЯрдирд╛ => {
(Event.target.value) this.props.someValueChanged;

const { target } = event;
setTimeout(() => {
  target.focus();
}, 10);

};
`` ``

рд╣рд╛рдБ, рд╕реБрдВрджрд░ рдирд╣реАрдВ ...

@scotatsatson "рдмрд╣реБрдд рдЕрдкреНрд░рд┐рдп рд╡реНрдпрд╡рд╣рд╛рд░ ... рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рднрдпрд╛рдирдХ рджреЛрд╖"ред рдпрд╣ рдореБрдлреНрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ ... styled-components рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдЪреНрдЫреА рдкрдХрдбрд╝ рд╣реИред

@scotmatson рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдореИрдВ Container = styled.div рдореБрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдЧреИрд░-рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХ div ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдФрд░ рдореИрдВ рдЖрдкрдХреА рдХреБрдВрдард╛рдУрдВ рдХреЛ рднреА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВред рдпрд╣ рдореБрджреНрджрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдореБрджреНрджрд╛ рджреЛ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд▓реНрдж рд╣реА рдЗрд╕реНрддреНрд░реА рд╣реЛ рдЬрд╛рдПрдВрдЧреА, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕рдордп рдХреА рд╕реЗрд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

EDIT2:
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рдереА: рд░реЗрдВрдбрд░-рдореЗрдердб рдореЗрдВ рдХрдВрдкреЛрдиреЗрдВрдЯ-рдХрдВрдкреЛрдиреЗрдВрдЯ рдШрдЯрдХ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛! рдпрд╣ рд╣рд░ рдкреБрди: рд░реЗрдВрдбрд░ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рдерд╛ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХрд╛ рд░реА-рд░реЗрдВрдбрд░ рд╕реАрдорд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдиреНрдп рд░реА-рд░реЗрдВрдбрд░ рдореБрджреНрджреЛрдВ рдХреА рдУрд░ рднреА рдЕрдЧреНрд░рд╕рд░ рдерд╛ред

рдЕрдкрдиреЗ рдШрдЯрдХ рдХреЗ рдмрд╛рд╣рд░ рдореЗрд░реА рд╕рднреА рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдП рдореЗрд░реЗ рд▓рд┐рдП рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред рд╢рд╛рдпрдж рдПрдХ рдЧрд╝рд▓рддреА рдХреА рдЧрд╝рд▓рддреА рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЬрд╝рд┐рдХреНрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣рд╛рдБ рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рд╡рд╛рдкрд╕ рдЖрдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реВрдБрдЧрд╛ред

рдореБрдЭреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛ рд░рд╣реА рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рднреА рдПрдХ TextFields (рдпрд╛ рдЗрдирдкреБрдЯ) рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЕрдВрджрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдлреЛрдХрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдирдХреНрд╢реЗ рдХреЗ рдмрд╛рд╣рд░ TextFields рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдХрд┐рд╕реА рднреА рд╕рд╣рд╛рд░рд╛ рдпрд╛ рдХреБрдЫ рдФрд░ рдпрд╛рдж рдЖ рд░рд╣реА рд╣реИ? рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЧрдпрд╛ рд╣реВрдВ

рдореИрдВрдиреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднрд╛рдЧреНрдп рдХреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рд▓рдЧрднрдЧ рд╣рд░ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

рдореЛрдЯрд╛ рдврд╛рдВрдЪрд╛ рдпрд╣ рд╣реИ

рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓

...
    function Steps(props) {
      const { steps } = props;
      if(steps) {
        return steps.map((step, index) => (
          <div key={(step.order === '' ? index : step.order)}>
            <NewUxCard step={step} index={index} onChange={props.onChange} 
              onChangeCard={props.onChangeCard} onParamChange={props.onParamChange}/>
          </div>
        ));
      }
    }  

<div>
  <TextField/> //working
  <Steps steps={this.props.ux.steps} onChange={this.onChange} 
              onChangeCard={this.handleChangeCard} onParamChange={this.handleParamChange} /> 
</div>

NewUxCard

...
<div>
  <TextField type="text" fullWidth id={"qq"+this.props.index} label="Name" 
                    value={this.props.step.name} onChange={this.props.onChangeCard('name', this.props.index)} margin="normal" /> //not working - loses focus on each key stroke
</div>

рд╡рд░реНрде рдиреЛрдЯрд┐рдВрдЧ рдХрд┐ рдореИрдВ Redux-React рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЗрдирдкреБрдЯ-> рдПрдХреНрд╢рди-> reducer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдзрдиреНрдпрд╡рд╛рдж

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ 1:
рд╕рдорд╕реНрдпрд╛ рдХреА рдЖрдЧреЗ рдХреА рдЬрд╛рдВрдЪ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ рдЪрд░рдг (рд╕рд╣рд╛рд░рд╛) рдЬреЛ рдПрдХ рдЯреИрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ(рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ)ред

рддреЛ рдкрд╣рд▓реЗ, рд╕рдВрд░рдЪрдирд╛ рдереА-> рдлрдВрдХреНрд╢рди рд╕реНрдЯреЗрдкреНрд╕ (рдкреНрд░реЙрдкреНрд╕) -> рдореИрдкрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ред рдЗрд╕рд▓рд┐рдП рдЕрдм, рдореИрдВрдиреЗ рдлрдВрдХреНрд╢рди (рдорд┐рдбрд┐рд▓ рдореИрди) рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рд╕рд┐рд░реНрдл рдХреЙрдиреНрд╕ рд╕реНрдЯреЗрдкреНрд╕ -> рдореИрдкрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рд╢рд╛рдпрдж рдХреБрдЫ рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛) рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЛ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ред

@ рдкрд┐рд▓реНрдЯрд╕реЗрди рдореБрдЭреЗ рд╕рд┐рд░реНрдл .map() рдореЗрдВ TextFields рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╕рдордп v1.5.0 рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ TextField рдХреБрдВрдЬреА рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд╕рдорд╛рди рдореВрд▓реНрдп рд╣реЛрдиреЗ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг TextField рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдФрд░ рдзреНрдпрд╛рди рдЦреЛрдирд╛ред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдм рддрдХ рдЖрдк рдЗрд╕реЗ рд╣рд▓ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ

рдпрд╣ рднреА рд░реЗрдВрдбрд░ рдкреНрд░реЙрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд▓рдХреНрд╖рдг рд╣реИред рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдирд╛

<HigherOrderComponent
    render={hocProps => <TextField value={...} onChange={...} />
/>

рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддрд╛ рд╣реИред рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдЧрд░ рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИ:

<HigherOrderComponentThatDoesntPassOwnState
    component={<TextField  {...this.props}/>}
/>

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЛрдХрд╕ рдирд╣реАрдВ рдЦреЛрдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди TextField рд╕реЗ рдХрд░реНрд╕рд░ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ document.activeElement рдореЗрд░реЗ TextField рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдореИрдВ рдореВрд▓реНрдп (рдкреНрд░рдХрд╛рд░ рд╕рдВрдЦреНрдпрд╛) рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдмреЛрд░реНрдб рдХрдорд╛рдВрдб рдФрд░ рдорд╛рдЙрд╕ рд╡реНрд╣реАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╣рд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ reducer рд░рди рд░реЗрдВрдбрд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрд░реНрд╕рд░ рдЦреЛ рдЬрд╛рддрд╛ рд╣реИред

рдлрд┐рд░ рд░реЗрдВрдбрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдореИрдВ рдЕрдкрдиреЗ TextField рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдмрдирд╛рддрд╛ рд╣реВрдВ

MyTextField.blur();
MyTextField.focus();

, рдЬреЛ рдорджрдж рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд╕рд╛рде рдлреЛрдХрд╕ () рдХрд░рддрд╛ рд╣реВрдВ , рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдареАрдХ рд╣реИ, рдПрдЪрдУрд╕реА рдХреЗ рдЕрдВрджрд░ рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдКрдкрд░ рдзрдХреЗрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

@ younes0 рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдареАрдХ рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реЗрд▓реНрдкрд░ рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рдХрдВрдкреЛрдиреЗрдВрдЯ рдерд╛ рдЬреЛ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЙрдкреНрд╕ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЯреЗрдХреНрд╕реНрдЯрдлрд┐рд▓реНрдб рд▓реМрдЯрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рдмрд╛рдХреА рдкреНрд░реЙрдкреНрд╕ рдХреЛ рдлреИрд▓рд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ className рдпрд╛ variant рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереАред рдкреВрд░реЗ рдлреЙрд░реНрдо рдкрд░ TextField s рдХреЛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИ, рдореИрдВ 3.2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

@OmarDavilaP рдХреНрдпрд╛ рдЖрдк рдПрдХ рдкреНрд░рдЬрдирди рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрд╕ рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЖрдИрдбреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
...
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдИрдбреА рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рд░рд┐рдПрдХреНрдЯ рдХрд┐рд╕ рддрддреНрд╡ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдерд╛ рдпрд╛ рдирд╣реАрдВ рдЗрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдкреБрдирд╢реНрдЪ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рдгреА рдореЗрдВ textfields рдерд╛ рдЬреЛ myArray.map рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдкрд░ рд╕рдорд╛рди рдХреБрдВрдЬреА рдкреНрд░рджрд╛рди рдХрд░рдиреА рд╣реЛрдЧреАред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдореЗрд░реЗ "рдРрд░реЗ" рдкрд░ "рдХреА" рд╣реЛрдиреЗ рд╕реЗ рд░реЗрдпрд░реЗрдВрдбрд░реНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред
рдЯреЗрдХреНрд╕реНрдЯрдлрд╝реАрд▓реНрдб рдЖрдИрдбреА рдмрджрд▓ рдХрд░ рд╢рд╛рд░реНрдЯ.рдЧрдВрдЬреЗрдЯ () рд╣реЛ рдЧрдИ рд╣реИред

    params.map(function(p,i){
        return(
           <div key={i}>              <--- this will always be the same for this particular row.
               <div className='param-inner'>
                   <TextField id={shortid.generate()} value = {p.value} onChange={this.updateParam.bind(this,i)}/>               <-- id here can be random, but it is necessary to avoid browser warning "we don't have enough information..."
                   </div>
               <div className='param-inner'>{p.unit}</div>
           </div>
        )
    }.bind(this));

рд╣рд╛рдБ, рдпрд╣ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛:

<NewTextField key={user.id+Math.random()}>
рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛:

<NewTextField key={user.id}>
рддреЛ, рд╣рд╛рдБ рдпрд╣ рдПрдХ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд▓рдЧрддрд╛ рд╣реИ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреБрдВрдЬреА рдЙрддреНрдкрдиреНрди рд╣рд░ рдмрд╛рд░ рдЬрдм рдпрд╣ рдШрдЯрдХ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!

рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark

рдореБрдЭреЗ рд╕рд╢рд░реНрдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЖ рд░рд╣реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ javascript рдСрдмреНрдЬреЗрдХреНрдЯ рд░реЗрдВрдбрд░ рдореЗрдВ рд╣реИ рдЬреЛ .js рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдЬрдм рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд▓реВрдВрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЕрдЧрд░ рдореБрдЭреЗ рдпрд╛рдж рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛! рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рд╣рд░ рдШрдЯрдХ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬрдм рд╡рд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдореИрдВ рддрд░реНрдХ рдХреЗ рдмрд╛рд╣рд░ рд╕реМрдВрдк рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рд╣реИ:

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЗрд╕ рдЪреАрдЬрд╝ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЖрдЬ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреАрдЯ рд▓рд┐рдпрд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЛ рдореИрдВ рдЧрд▓рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рд╡рд╣ рдореЗрд░реЗ рдкреЗрдЬ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TextField рдХреЛ рдЕрдкрдиреЗ рдкреЗрдЬ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯ рд░рд╣рд╛ рдерд╛ (рдпрджрд┐ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЖрджрд┐ рдЖрджрд┐ рд╕реЗ рдХреБрдЫ рд░реЗрдВрдбрд░ рди рдХрд░реЗрдВ), рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ useState рдЫреЛрдбрд╝ рджрд┐рдпрд╛ TextField рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ред

рдкреЛрд╕реНрдЯрд░рд┐рдЯреА рдХреЗ рд▓рд┐рдП, рдореЗрд░реА рдореВрд░реНрдЦрддрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рдХреЛрдбреИрдВрдбрдмреЙрдХреНрд╕ рд▓рд┐рдВрдХ рд╣реИ: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb

рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ TextField рд░реИрдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдКрдВрдЧрд╛? рдЗрд╕ рдмрдЧ рдореЗрдВ HOC рдФрд░ createElement рджреЛрдиреЛрдВ рд▓рдЧрддреЗ рд╣реИрдВ:

  const MyField= ({ name, ...props }) => (
    <TextField
      fullWidth
      variant="outlined"
      size="small"
      name={name}
      {...props}
    />
  );
  const MyField= ({ name, ...rest }) => {
    return React.createElement(TextField, {
      fullWidth: true,
      variant: "outlined",
      size: "small",
      name: name,
      {...rest}
    });
  };

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдЬрдм рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!

рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark

рдпрд╣ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдереАред рдзрдиреНрдпрд╡рд╛рдж!

рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред рдЬрдм рдкреИрд░реЗрдВрдЯ рд╕реНрдХреЛрдк рдХреЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдореИрдВрдиреЗ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛: https://codesandbox.io/s/mui-textedit-losefocus-g6xxb

рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛!

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдореБрджреНрджрд╛ рдерд╛, рдореИрдВрдиреЗ TextField рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛, рдПрдХ рдмрд╛рд░ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдЪрд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛!

рдореИрдВрдиреЗ рдПрдХ Sendbox рдирдореВрдирд╛ рдмрдирд╛рдпрд╛ https://codesandbox.io/s/material-demo-msbxl?fontsize=14&hidenavigation=1&theme=dark

@ fleischman718 рдпрд╣ рдПрдХ рдмрд╛рд╣рд░ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореВрд▓ рдШрдЯрдХ рдХреЗ рдЕрдВрджрд░ TextField рдХреЗ рд▓рд┐рдП рд░реИрдкрд┐рдВрдЧ рдШрдЯрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИ!

рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдПрдХ рд╕реЗрдХрдВрдб рд▓рдЧрд╛ рдХрд┐ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдиреАрдЪреЗ рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рджрд┐рдпрд╛:

import { TextField } from '@material-ui/core';

const ParentComponent = () => {

  // DON'T DO THIS!!!
  // fix issue by moving this component definition outside of the ParentComponent
  // or assign the TextField to a variable instead
  const TextFieldWrapper = () => (
    <TextField />
  );

  return (
    <div>
      <TextFieldWrapper />
    </div>
  )
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ericraffin picture ericraffin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

iamzhouyi picture iamzhouyi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zabojad picture zabojad  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ryanflorence picture ryanflorence  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ