Cum se aplică un atribut id la un element copil al unei componente ReactJS? (Programare, Javascript, Reactjs, Html Select)

Ralph David Abernathy a intrebat.

Deci, am o componentă dropdown:

import React from 'react';
import { PropTypes } from 'prop-types';

export default class Dropdown extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      value: this.props.selectedDropdownValue,
    };

    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(e) {
    this.setState({
      value: e.target.value,
    });

    this.props.onChange(e.target.value);
  }

  render() {
    let disabled = false;
    let dropdownOptions = null;
    const { options } = this.props;

    // Disable dropdown is the disabled attribute is added
    if (options) {
      dropdownOptions = this.props.options.map((option) =>
        <option value={option.key} key={option.key} >{option.display}</option>,
      );
    } else {
      // Setting default options
      const defaultOptions = [
        { key: '', display: 'Please configure defaultOptions' },
      ];

      disabled = true;

      dropdownOptions = defaultOptions.map((option) =>
        <option value={option.key} key={option.key} >{option.display}</option>,
      );
    }

    return (
      <select
        value={this.state.value}
        onChange={this.handleChange}
        disabled={disabled}
      >
        { dropdownOptions }
      </select>
    );
  }
}

Dropdown.propTypes = {
  options: PropTypes.arrayOf(PropTypes.object),
  onChange: PropTypes.func,
  selectedDropdownValue: PropTypes.string,
};

Dropdown.defaultProps = {
  options: undefined,
  onChange: this.handleChange,
  selectedDropdownValue: '',
};

Și aici este modul în care am redat dropdown în vizualizarea mea:

import React from 'react';
import { PropTypes } from 'prop-types';
import Dropdown from 'components/Dropdown';

class Anish extends React.Component {
  render() {
    return (
      <div>
        <div>
          Value Selected: {this.props.selectedDropdownValue}
        </div>
        <label htmlFor={'dropdownId1'}>Sort by: </label>
        <Dropdown
          id="dropdownId1"
          options={[
            { key: '', display: 'Please select a value' },
            { key: 'NJ', display: 'New Jersey' },
            { key: 'NY', display: 'New York' },
          ]}
          onChange={this.props.onSetDropdownValue}
        />
      </div>
    );
  }
}

Anish.propTypes = {
  selectedDropdownValue: PropTypes.string,
  onSetDropdownValue: PropTypes.func.isRequired,
};

Anish.defaultProps = {
  selectedDropdownValue: '',
};

export default Anish;

Iată cum sunt redate în browser dropdown și eticheta:

Deci, cum pot aplica id-ul care este pe… <Dropdown /> la <select> în interiorul ei?

Orice ajutor este apreciat.

Comentarii

  • <select id={this.props.id}...? –  > Por Andy.
  • Duh. Am crezut că am încercat asta anterior, dar m-am înșelat. Mulțumesc! Nu ezitați să postați un răspuns la întrebare, ca să mai obțineți măcar câteva puncte… –  > Por Ralph David Abernathy.
2 răspunsuri
Andy

props va conține ID-ul de la Dropdown componentă, dar din moment ce sunteți în cadrul unei componente React utilizați this.props.

return (
  <select
    id={this.props.id}
    value={this.state.value}
    onChange={this.handleChange}
    disabled={disabled}
  >
    {dropdownOptions}
  </select>
)

Michael De La Cruz

Ar trebui să adăugați id={{option.id} la if/else și, de asemenea, la return. Rețineți: că în clasa Anish treceți id=”dropdownId1″ ca prop. Nu sunt sigur dacă asta este intenționat.

if (options) {
   dropdownOptions = this.props.options.map((option) =>
  <option value={option.key} id={option.id} key={option.key} >{option.display}</option>,
  );
} else {
 // Setting default options
      const defaultOptions = [
        { key: '', display: 'Please configure defaultOptions' },
      ];

      disabled = true;

      dropdownOptions = defaultOptions.map((option) =>
        <option id={option.id} value={option.key} key={option.key} >{option.display}</option>,
      );
    }
    return (
      <select
        value={this.state.value}
        onChange={this.handleChange}
        disabled={disabled}
        id={option.id}
      >
        { dropdownOptions }
      </select>
    );

// Nu uitați să adăugați id la propTypes

id: React.PropTypes.string,