Два события onChange для одного TextField не выполняют оба события onChange - PullRequest
1 голос
/ 04 апреля 2020

В следующем коде я пытаюсь выполнить два события onChange для одного TextField. Я попытался выполнить оба события onChange по отдельности, и они работают нормально. Почему оба моих мероприятия не проходят одновременно? Когда я объединил их, выполняется только событие handleChange, а не событие _onChange. Что я делаю не так?

import * as React from 'react';
import { TextField } from 'office-ui-fabric-react/lib/TextField';
import { Stack, IStackProps } from 'office-ui-fabric-react/lib/Stack';
export interface TestState {
  [key: string]: TestState[keyof TestState];
  descriptionVal: string;
  multiline: boolean;
}

export default class Test extends React.Component<{}, TestState> {
  constructor(props: {}) {
    super(props);
    this.state = {
      descriptionVal: "",
      multiline: false
    };

  }

  public render(): JSX.Element {
    const columnProps: Partial<IStackProps> = {
      tokens: { childrenGap: 15 },
      styles: { root: { width: 300 } },
    };

    return (
      <Stack horizontal tokens={{ childrenGap: 50 }} styles={{ root: { width: 650 } }}>

        <Stack {...columnProps}>
          <TextField
            label="Switches from single to multiline if more than 50 characters are entered"
            multiline={this.state.multiline}
            onChange={this.twoCalls}
            value={this.state["descriptionVal"]}
          />
        </Stack>
      </Stack>
    );
  }
  twoCalls = e => {
    {this.handleChange("descriptionVal")(e)}
    {this._onChange}
  }
  private _onChange = (ev: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, newText: string): void => {
    const newMultiline = newText.length > 50;
    if (newMultiline !== this.state.multiline) {
      console.log(ev);
      this.setState({ multiline: newMultiline });
    }
  };
    handleChange = (field: string) => (event: any) => {
    const value = event.target.value.toUpperCase();
    this.setState({ [field]: value });
  };
  }

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Во-первых, у вас есть дополнительные фигурные скобки, которые вам не нужны в ваших утверждениях. Во-вторых, вы на самом деле не вызываете вторую функцию, this.function !== this.function(). Вы должны сделать что-то вроде этого:

twoCalls = e => {
    this.handleChange("descriptionVal")(e);
    this._onChange(e);
}
0 голосов
/ 04 апреля 2020

"twoCalls" должно быть таким

  twoCalls = (e: React.FormEvent<HTMLInputElement | HTMLTextAreaElement>, newText: string): void => {
    this.handleChange("descriptionVal")(e);

    this._onChange(e, newText);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...