Я разрабатываю свое первое приложение React. Я импортировал кнопку Material-ui и настроил ее.

Теперь я хочу повторно использовать эту пользовательскую кнопку в нескольких компонентах моего приложения. Я хочу, чтобы каждый раз, когда я использовал эту пользовательскую кнопку, был другой текст.

Где мне нужно написать этот конкретный текст для каждой кнопки?

Моя кнопка видна, когда я импортирую ее в другие компоненты, но я не вижу текст, который я написал внутри компонента кнопки. Кнопка остается пустой.

Мой пользовательский компонент кнопки: MyButton:

import React from "react";
import Button from "@material-ui/core/Button";
import { withStyles } from "@material-ui/core/styles";

const styles = () => ({
  button: {
    margin: 50,
    padding: 10,
    width: 180,
    fontSize: 20
  }
});

function MyButton(props) {
  const { classes } = props;
  return (
    <Button variant="contained" color="primary" className={classes.button}>
      <b>  </b>
    </Button>
  );
}

export default withStyles(styles)(MyButton);

Другой компонент, куда я импортирую компонент MyButton: Home:

import React from "react";
import "../App.css";
import MyButton from "./Button";

function Header() {
  return (
    <header className="Header">
      {/* background image in css file */}
      <h1>Welcome </h1>
      <h3> description...</h3>
      <MyButton>Play now</MyButton>
    </header>
  );
}

export default Header;

Я ожидаю, что кнопка покажет «Воспроизвести сейчас» (ожидаемый результат), но пока остается пустым (фактический результат).

3
Campalo 1 Май 2019 в 13:46

3 ответа

Лучший ответ

Кроме того, я нашел другое решение, которое предлагает возможность писать непосредственно текст внутри каждой кнопки (дочерние элементы MyButton) и настраивать его при необходимости.

Передайте ключевое слово children как props компоненту MyButton:

function MyButton(props) {
  const { classes, children } = props;
  return (
    <Button variant="contained" color="primary" className={classes.button}>
      <b>{children}</b>
    </Button>
  );
}

Затем напишите текст своей кнопки внутри кнопки, как вы это сделаете в html:

<MyButton> Play now </MyButton>
3
Campalo 1 Май 2019 в 11:50

Вы получите наибольшую гибкость от своего пользовательского Button, если передадите все реквизиты вместе с завернутым Button. Это автоматически позаботится о children и classes, если вы используете ключи класса в вашем styles объекте, которые соответствуют CSS-классы поддерживаются для обернутого компонента.

import React from "react";
import Button from "@material-ui/core/Button";
import { withStyles } from "@material-ui/core/styles";

const styles = () => ({
  root: {
    margin: 50,
    padding: 10,
    width: 180,
    fontSize: 20,
    fontWeight: "bold"
  }
});

function CustomButton(props) {
  return <Button variant="contained" color="primary" {...props} />;
}

export default withStyles(styles)(CustomButton);

Edit Custom Button

Обратите внимание, что в примере с песочницей это позволяет вам использовать другие функции Button, например disabled, указывать дополнительные стили или переопределять некоторые свойства, указанные в CustomButton.

Если у вас есть сценарий, в котором вам нужно явно обработать children (в моем примере выше я использовал fontWeight CSS вместо тега <b>), вы можете использовать следующий синтаксис для передачи всех реквизит до завернутого компонента:

function CustomButton({children, ...other}) {
  return <Button variant="contained" color="primary" {...other}><b>{children}</b></Button>;
}
0
Ryan Cogswell 1 Май 2019 в 14:38

Передать текст кнопки в качестве реквизита для вашего компонента кнопки

<MyButton text="Play now"></MyButton>

Тогда внутри компонента MyButton вы можете получить его как

  function MyButton(props) {
   const { classes,text } = props;
    return (
     <Button variant="contained" color="primary" className={classes.button}>
       <b> {text} </b>
      </Button>
    );
  }
-1
Wai Ha Lee 1 Май 2019 в 12:52