单选按钮的文本紧缩在一起

时间:2019-03-04 22:50:04

标签: javascript css reactjs material-ui

因此,我目前有2个单选按钮-但是我有一个自动建议的文本字段,而不是按钮右边的传统文本。但是,该文本字段显示为混杂在一起,不能正确显示。如何正确显示?

这是单选按钮显示

<RadioGroup
  value={this.state.value}
  onChange={this.handleChange}
>
  <FormControlLabel value="email" control={<Radio />} label={<Autosuggest onChange={this.setEmail} users={this.state.users} />} />
</RadioGroup>

这是自动建议的代码


import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Select from 'react-select';
import {withStyles} from '@material-ui/core/styles';
import Typography from '@material-ui/core/Typography';
import NoSsr from '@material-ui/core/NoSsr';
import TextField from '@material-ui/core/TextField';
import Paper from '@material-ui/core/Paper';
import Chip from '@material-ui/core/Chip';
import MenuItem from '@material-ui/core/MenuItem';
import {emphasize} from '@material-ui/core/styles/colorManipulator';

const suggestions = (users) => users.map(suggestion => ({
    value: suggestion.email,
    label: suggestion.email,
  }));
  const styles = theme => ({
    root: {
      flexGrow: 1,
      marginTop: '25px'
    },
    input: {
      display: 'flex',
      padding: 0,
    },
    valueContainer: {
      display: 'flex',
      flexWrap: 'wrap',
      flex: 1,
      alignItems: 'center',
      overflow: 'hidden',
    },
    chip: {
      margin: `${theme.spacing.unit / 2}px ${theme.spacing.unit / 4}px`,
    },
    chipFocused: {
      backgroundColor: emphasize(
        theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700],
        0.08,
      ),
    },
    noOptionsMessage: {
      padding: `${theme.spacing.unit}px ${theme.spacing.unit * 2}px`,
    },
    singleValue: {
      fontSize: 16,
    },
    placeholder: {
      position: 'absolute',
      left: 2,
      fontSize: 16,
    },
    paper: {
      position: 'absolute',
      zIndex: 1,
      marginTop: theme.spacing.unit,
      left: 0,
      right: 0,
    },
    divider: {
      height: theme.spacing.unit * 2,
    },
  });

  function NoOptionsMessage(props) {
    return (
      <Typography
        color="textSecondary"
        className={props.selectProps.classes.noOptionsMessage}
        {...props.innerProps}
      >
        {props.children}
      </Typography>
    );
  }

  function inputComponent({inputRef, ...props}) {
    return <div ref={inputRef} {...props} />;
  }

  function Control(props) {
    return (
      <TextField
        fullWidth
        InputProps={{
          inputComponent,
          inputProps: {
            className: props.selectProps.classes.input,
            inputRef: props.innerRef,
            children: props.children,
            ...props.innerProps,
          },
        }}
        {...props.selectProps.textFieldProps}
      />
    );
  }

  function Option(props) {
    return (
      <MenuItem
        buttonRef={props.innerRef}
        selected={props.isFocused}
        component="div"
        style={{
          fontWeight: props.isSelected ? 500 : 400,
        }}
        {...props.innerProps}
      >
        {props.children}
      </MenuItem>
    );
  }

  function Placeholder(props) {
    return (
      <Typography
        color="textSecondary"
        className={props.selectProps.classes.placeholder}
        {...props.innerProps}
      >
        {props.children}
      </Typography>
    );
  }

  function SingleValue(props) {
    return (
      <Typography className={props.selectProps.classes.singleValue} {...props.innerProps}>
        {props.children}
      </Typography>
    );
  }

  function ValueContainer(props) {
    return <div className={props.selectProps.classes.valueContainer}>{props.children}</div>;
  }

  function MultiValue(props) {
    return (
      <Chip
        tabIndex={-1}
        label={props.children}
        className={classNames(props.selectProps.classes.chip, {
          [props.selectProps.classes.chipFocused]: props.isFocused,
        })}
        onDelete={props.removeProps.onClick}
      />
    );
  }

  function Menu(props) {
    return (
      <Paper square className={props.selectProps.classes.paper} {...props.innerProps}>
        {props.children}
      </Paper>
    );
  }

  const components = {
    Control,
    Menu,
    MultiValue,
    NoOptionsMessage,
    Option,
    Placeholder,
    SingleValue,
    ValueContainer,
  };

  class Autosuggest extends React.Component {

    constructor(props) {
      super(props);
      this.state = {
        single: null,
      };
    };

    handleChange = name => value => {
      this.setState({
        [name]: value
      });
      this.props.onChange(value.value);
    };

    componentWillMount() {
        suggestions(this.props.users);
    }

    render() {
      const {classes, theme} = this.props;

      const selectStyles = {
        input: base => ({
          ...base,
          color: theme.palette.text.primary,
          '& input': {
            font: 'inherit',
          },
        }),
      };

      return (
        <div className={classes.root}>
          <NoSsr>
            <Select
              classes={classes}
              styles={selectStyles}
              options={suggestions(this.props.users)}
              components={components}
              value={this.state.single}
              onChange={this.handleChange('single')}
              placeholder="Share with an email"
            />
          </NoSsr>
        </div>
      );
    }
  }

  Autosuggest.propTypes = {
    classes: PropTypes.object.isRequired,
    theme: PropTypes.object.isRequired,
  };

  export default withStyles(styles, {withTheme: true})(Autosuggest);

0 个答案:

没有答案