Adicionar campos de texto dinâmicos por meio da seleção suspensa de componentes?

Ethan

No projeto a seguir, estou criando um Painel de Tarefas usando TypeScript e React no Microsoft Excel. Quando o painel de tarefas for carregado, ele terá apenas um menu suspenso básico com algumas opções.Caminho da pasta

AppPic.tsx

import * as React from "react";
import Progress from "./Progress";
import { Dropdown, DropdownMenuItemType, IDropdownStyles, IDropdownOption } from 'office-ui-fabric-react/lib/Dropdown';
//import TopLevel from "./Operations/TopLevel";
//import MakeItem from "./Operations/MakeItem";
//import RawMaterial from "./Operations/RawMaterial";
//import BuyItem from "./Operations/BuyItem";
export interface AppProps {
  title: string;
  isOfficeInitialized: boolean;
}

export interface AppState {

}

export default class App extends React.Component<AppProps, AppState> {
  constructor(props, context) {
    super(props, context);
    this.state = {
    };
  }

  componentDidMount() {
    this.setState({

    });
  }

  render() {
    const { title, isOfficeInitialized } = this.props;
    const dropdownStyles: Partial<IDropdownStyles> = {
      dropdown: { width: 300 }
    };
    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' },
    ];
    ;
    if (!isOfficeInitialized) {
      return (
        <Progress title={title} logo="assets/logo-filled.png" message="Please sideload your addin to see app body." />
      );
    }

    return (
      <div className="ms-welcome">
            <Dropdown
              label="Operation"
              key="dropDownKey"
              options={options}
              styles={dropdownStyles}
            />
      </div>
    );
  }
}

Após a resposta de Klas, mudei um pouco meu código, mas estou tendo problemas porque não há erros gerados. Eu tenho meu App.tsx, meu TopLevel.tsx e o novo arquivo que criei por causa do Klas chamado Dropdown.tsx. Por enquanto vou esquecer "Make", estou apenas tentando entender a lógica. O que estou fazendo de errado aqui?

App.tsx

import * as React from "react";
import Dropdown from "./Operations/Dropdown";
export interface AppProps {
  title: string;
  isOfficeInitialized: boolean;
}
export interface AppState {

}

function App() {
  return <Dropdown />;
}

export default App;

Dropdown.tsx

import * as React from "react";
import TopLevel from './TopLevel';
import { useState } from 'react';
const Dropdown = (): React.ReactElement => {
    const [value, setValue] = useState("none");
    let Form: any;
    switch (value) {
      case "TopLevel":
        Form = <TopLevel title="title" logo="logo" message="message" />;
        break;

      case "Make":
        Form = <div />;
        break;

      default:
        Form = <div />;
        break;
    }
    return (
      <div>
        <select
          id="lang"
          onChange={event => event?.target?.value && setValue(event.target.value)}
          value={value}
        >
          <option value="select">Select</option>
          <option value="TopLevel">TopLevel</option>
          <option value="Make">Make</option>
        </select>
        {Form}
      </div>
    );
  };
  export default Dropdown;

TopLevel.tsx

import * as React from "react";

export interface TopLevelProps {
  title: string;
  logo: string;
  message: string;
}
export default class TopLevel extends React.Component<TopLevelProps> {
  render() {
    return (
      <div>
        <div>TopLevel</div>
        <input placeholder="Part Number" />
      </div>
    );
  }
}

Aqui está o erro que estou recebendo. insira a descrição da imagem aqui

Aula de Mellbourn

Aqui está um programa básico que possui uma lista suspensa e mostrará diferentes formulários com base no valor da lista suspensa.

const Dropdown = (): React.ReactElement => {
  const [value, setValue] = useState("none");

  let Form: any;
  switch (value) {
    case "TopLevel":
      Form = <TopLevel title="title" logo="logo" message="message" />;
      break;

    case "Make":
      Form = <Make />;
      break;

    default:
      Form = <div />;
      break;
  }

  return (
    <div>
      <select
        id="lang"
        onChange={event => event?.target?.value && setValue(event.target.value)}
        value={value}
      >
        <option value="select">Select</option>
        <option value="TopLevel">TopLevel</option>
        <option value="Make">Make</option>
      </select>
      {Form}
    </div>
  );
};

export interface TopLevelProps {
  title: string;
  logo: string;
  message: string;
}

class TopLevel extends React.Component<TopLevelProps> {
  render() {
    return (
      <div>
        <div>TopLevel</div>
        <input placeholder="Part Number" />
      </div>
    );
  }
}

class Make extends React.Component<{}> {
  render() {
    return <div>Make</div>;
  }
}

function App() {
  return <Dropdown />;
}

Observe como o switchpermite que você tenha diferentes formas para diferentes valores.

O DropDowncomponente que você está usando também tem uma onChangepropriedade, de modo que deve ser possível conectar de maneira semelhante, com diferentes renderizações de formas para diferentes valores.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Adicionar campos dinâmicos à resposta da visualização Spring JSON

como adicionar campos dinâmicos em tempo de execução no Django

Postar valores da caixa de seleção ao usar campos dinâmicos

Adicionar campos de formulário dinâmicos com JavaScript

Karate: passar valores de parâmetros dinâmicos por meio da linha de comando não funciona

Seleção da resposta correta ao adicionar perguntas ao banco de dados por meio de formulário HTML

Seleção da resposta correta ao adicionar perguntas ao banco de dados por meio de formulário HTML

Adicionar linha por meio da função JS com uma célula na opção de seleção

Adicionar linha por meio da função JS com uma célula na opção de seleção

Alterar a fonte da área de texto conforme a seleção da lista suspensa

Javascript / JQuery: Adicionar caixa de texto quando o valor da lista / lista suspensa for "outro"

Gravando VBA para filtrar por meio de campos da tabela dinâmica OLAP

Como posso adicionar campos dinamicamente no Filebeats por meio da ferramenta de linha de comando?

por que a vinculação de propriedades na criação de componentes dinâmicos não funciona?

Ocultar tabela por meio da caixa de seleção

Preparação de dados dinâmicos para exibição por meio da API de gráficos do Google

Eventos de caixa de seleção dinâmicos por meio do botão de comando

Seleção de rótulo por meio da tecla Tab

Como posso obter a opção de texto da lista suspensa de seleção gerada por AJAX usando jQuery?

Caixa de seleção em uma tabela dinâmica com campos de entrada dinâmicos

como adicionar o valor da caixa de texto à lista suspensa

Ao criar fragmentos dinâmicos de android, por meio do gerenciador de fragmentos, não consigo definir o texto na visualização desse fragmento

Gerando componentes por meio de iteração

Preencher campos de texto de acordo com a seleção suspensa

Criação de um pool de recursos dinâmicos para yarn por meio da API REST do Cloudera Manager

Barra de pesquisa do Google - adicionar texto de pesquisa personalizado por meio da caixa de seleção de entrada

Como adicionar uma lista suspensa em uma solicitação de reunião do Outlook por meio de um suplemento personalizado?

Saída de texto após HTML de seleção suspensa dinâmica

O subcomponente não é atualizado na seleção suspensa por meio de onConfigure

TOP lista

  1. 1

    R Shiny: use HTML em funções (como textInput, checkboxGroupInput)

  2. 2

    O Chromium e o Firefox exibem as cores de maneira diferente e não sei qual deles está fazendo certo

  3. 3

    Como assinar digitalmente um documento PDF com assinatura e texto visíveis usando Java

  4. 4

    R Folheto. Dados de pontos de grupo em células para resumir muitos pontos de dados

  5. 5

    Gerenciar recurso shake de Windows Aero com barra de título personalizado

  6. 6

    Como obter dados API adequados para o aplicativo angular?

  7. 7

    UITextView não está exibindo texto longo

  8. 8

    Por que meus intervalos de confiança de 95% da minha regressão multivariada estão sendo plotados como uma linha de loess?

  9. 9

    Acessando relatório de campanhas na AdMob usando a API do Adsense

  10. 10

    Usando o plug-in Platform.js do Google

  11. 11

    Como posso modificar esse algoritmo de linha de visada para aceitar raios que passam pelos cantos?

  12. 12

    Dependência circular de diálogo personalizado

  13. 13

    Coloque uma caixa de texto HTML em uma imagem em uma posição fixa para site para desktop e celular

  14. 14

    iOS: como adicionar sombra projetada e sombra de traço no UIView?

  15. 15

    Como usar a caixa de diálogo de seleção de nomes com VBA para enviar e-mail para mais de um destinatário?

  16. 16

    Tabela CSS: barra de rolagem para a primeira coluna e largura automática para a coluna restante

  17. 17

    How to create dynamic navigation menu select from database using Codeigniter?

  18. 18

    Converter valores de linha SQL em colunas

  19. 19

    ChartJS, várias linhas no rótulo do gráfico de barras

  20. 20

    用@StyleableRes注释的getStyledAttributes。禁止警告

  21. 21

    não é possível adicionar dependência para com.google.android.gms.tasks.OnSuccessListener

quentelabel

Arquivo