Как установить значение TextField из выпадающего списка? - PullRequest
0 голосов
/ 01 апреля 2020

В следующем коде мне было любопытно, как установить значение следующего TextField. Для этого примера, как мне установить TextField для выбранного элемента в раскрывающемся списке? Если пользователь выбирает «TOP LEVEL» в раскрывающемся списке, я хочу заполнить TextField как «TOP LEVEL». Раскрывающийся список называется ChildComponent

import * as React from "react";
import ChildComponent from './Operations/ChildComponent';
import { DropdownMenuItemType, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';
import { TextField} from 'office-ui-fabric-react/lib/TextField';
export interface ParentComponentState {
    selectedItem?: { key: string | number | undefined };
    value: {key: string};
  }

  export default class ParentComponent extends React.Component<{}, ParentComponentState> {
    constructor(props, context) {
        super(props, context);

      }
    public state: ParentComponentState = {
      selectedItem: undefined,
      value: undefined,
    };

  render(){
    const { selectedItem } = this.state;
    const options: IDropdownOption[] = [
        { key: 'blank', text: '' },
        { key: 'topLevelMake', text: 'Parents', itemType: DropdownMenuItemType.Header },
        { key: 'topLevel', text: 'TOP LEVEL' },
        { key: 'make', text: 'MAKE ITEM' },
        { key: 'divider_1', text: '-', itemType: DropdownMenuItemType.Divider },
        { key: 'Purchased', text: 'Purchases', itemType: DropdownMenuItemType.Header },
        { key: 'rawMaterial', text: 'RAW MATERIAL' },
        { key: 'buyItem', text: 'BUY ITEM' },
      ];
      return(
        <div>
            <ChildComponent 
                options={options} 
                selectedKey={selectedItem ? selectedItem.key : undefined}
                onChange={this._onChange}
            />
            <TextField
                name="textTest"
                label={"Test"}
            />
        </div>
          );
   }
   private _onChange = (event: React.FormEvent<HTMLDivElement>, item: IDropdownOption): void => {
    this.setState({ selectedItem: item });
    let opValue = item.text;
    console.log(event);
    console.log(opValue);
  };
}

После вставки логики Мухаммеда c, вот ошибка, которую я получаю. Нужно ли добавлять событие onChange для TextField? а затем положить «this.state.selectedItem» в событие handleChange? Нужно ли создавать новый дочерний компонент и иметь сведение TextField к ParentComponent?

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 апреля 2020
import * as React from "react";
import ChildComponent from './Operations/ChildComponent';
import { DropdownMenuItemType, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';
import { TextField} from 'office-ui-fabric-react/lib/TextField';
export interface ParentComponentState {
    selectedItem?: { key: string | number | undefined };
    value?; 
  }

  export default class ParentComponent extends React.Component{
    constructor(props) {
        super(props);
        this.state = {
            value: '',
          };
        }
    public state: ParentComponentState = {
      selectedItem: undefined,
    };
    handleChange = (event) => {
        this.setState({
            value: event.target.value,
        })
    };
  render(){
    const { selectedItem } = this.state;
    const options: IDropdownOption[] = [
        { key: 'blank', text: '' },
        { key: 'topLevelMake', text: 'Parents', itemType: DropdownMenuItemType.Header },
        { key: 'topLevel', text: 'TOP LEVEL' },
        { key: 'make', text: 'MAKE ITEM' },
        { key: 'divider_1', text: '-', itemType: DropdownMenuItemType.Divider },
        { key: 'Purchased', text: 'Purchases', itemType: DropdownMenuItemType.Header },
        { key: 'rawMaterial', text: 'RAW MATERIAL' },
        { key: 'buyItem', text: 'BUY ITEM' },
      ];
      return(
        <div>
            <ChildComponent 
                options={options} 
                selectedKey={selectedItem ? selectedItem.key : undefined}
                onChange={this._onChange}
            />
            <TextField
                name="textTest"
                label={"Test"}
                onChange={this.handleChange}
                value={this.state.value}
            />
        </div>
          );
   }
   private _onChange = (event: React.FormEvent<HTMLDivElement>, item: IDropdownOption): void => {
    this.setState({ selectedItem: item });
    this.setState({value: item.text})
    let opValue = item.text;
    console.log(event);
    console.log(opValue);
  };
}
0 голосов
/ 01 апреля 2020

Вам просто нужно присвоить это состояние в значении prop для textField, поскольку у вас есть selectedItem в вашем state

 <TextFieid
    label={"Test"}
    styles={{ root: { width: 300 } }}
    value={this.state.selectedItem}
  />
...