Akses alat peraga di dalam kutipan di Bereaksi JSX


295

Di BEJ, bagaimana Anda referensi nilai propsdari dalam nilai atribut yang dikutip?

Sebagai contoh:

<img className="image" src="images/{this.props.image}" />

Output HTML yang dihasilkan adalah:

<img class="image" src="images/{this.props.image}">

Jawaban:


476

Bereaksi (atau JSX) tidak mendukung interpolasi variabel di dalam nilai atribut, tetapi Anda bisa meletakkan ekspresi JS apa pun di dalam kurung kurawal sebagai keseluruhan nilai atribut, jadi ini berfungsi:

<img className="image" src={"images/" + this.props.image} />

26
bagaimana dengan backtips di es6?
David Lavieri

1
@ DavidLavieri Lihat jawaban Cristi, stackoverflow.com/a/30061326/70345 di bawah ini.
Ian Kemp


47

Jika Anda menggunakan JSX dengan Harmony, Anda bisa melakukan ini:

<img className="image" src={`images/${this.props.image}`} />

Di sini Anda menulis nilai srcsebagai ekspresi.


1
ini adalah sesuatu yang sulit ditemukan. dan untuk wadah yang dapat digunakan kembali, ini adalah yang harus diketahui
holm

2
Hanya agar orang tidak bingung dengan menyebutkan Harmoni, ini adalah bagian dari standar ES6 , sedangkan jawabannya adalah beberapa bulan sebelum menjadi standar.
Сергей Гринько

12

Alih-alih menambahkan variabel dan string, Anda dapat menggunakan string template ES6! Berikut ini sebuah contoh:

<img className="image" src={`images/${this.props.image}`} />

Adapun semua komponen JavaScript lainnya di dalam JSX, gunakan string template di dalam kurung kurawal. Untuk "menyuntikkan" variabel, gunakan tanda dolar diikuti oleh kurung kurawal yang berisi variabel yang ingin Anda suntikkan. Sebagai contoh:

{`string ${variable} another string`}

8

Praktik terbaik adalah menambahkan metode pengambil untuk itu:

getImageURI() {
  return "images/" + this.props.image;
}

<img className="image" src={this.getImageURI()} />

Kemudian, jika Anda memiliki lebih banyak logika nanti, Anda dapat mempertahankan kode dengan lancar.



1

Catatan: Sebagai reaksi Anda dapat menempatkan ekspresi javascript di dalam kurung kurawal. Kita dapat menggunakan properti ini dalam contoh ini.
Catatan: lihat satu contoh di bawah ini:

class LoginForm extends React.Component {

  constructor(props) {
    super(props);

    this.state = {i:1};
  }

  handleClick() {
    this.setState(prevState => ({i : prevState.i + 1}));

    console.log(this.state.j);  
  }


  render() {

    return (
      <div>
        <p onClick={this.handleClick.bind(this)}>Click to change image</p>
        <img src={'images/back'+ this.state.i+'.jpg'}/>
      </div>
      );

  }
}

1

Berikut adalah Pilihan Terbaik untuk className atau Alat Peraga Dinamis, cukup lakukan beberapa penggabungan seperti yang kami lakukan dalam Javascript.

     className={
        "badge " +
        (this.props.value ? "badge-primary " : "badge-danger ") +
        " m-4"
      }

Saya akan merekomendasikan menggunakan classnamespaket untuk membangun classNames dinamis
David Lavieri

1

kamu bisa memakai

<img className="image" src=`images/${this.props.image}`>

atau

<img className="image" src={'images/'+this.props.image}>

atau

  render() {
         let imageUrl = this.props.image ? "images/"+this.props.image : 'some placeholder url image';
    return (
       <div>
          <img className="image" src={imageUrl} />
       </div>
    )
  }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.