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}">
cantera
sumber

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} />
Sophie Alpert
sumber
26
bagaimana dengan backtips di es6?
David Lavieri
1
@ DavidLavieri Lihat jawaban Cristi, stackoverflow.com/a/30061326/70345 di bawah ini.
Ian Kemp
235

Jika Anda ingin menggunakan literal templat es6, Anda juga perlu tanda kurung di sekitar tanda centang:

<img className="image" src={`images/${this.props.image}`} />
Cristi
sumber
ES6 Templat literal masa depan
zloctb
1
String yang dilingkupi oleh backticks adalah "templat literal": developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Jon Schneider
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.

pengguna3089094
sumber
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`}
Saahil
sumber
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.

Abdennour TOUMI
sumber
2

Untuk Orang-orang, mencari jawaban yang berkaitan dengan fungsi 'peta' dan data dinamis, berikut adalah contoh yang berfungsi.

<img src={"http://examole.com/randomview/images" + each_actor['logo']} />

Ini memberikan URL sebagai " http://examole.com/randomview/images/2/dp_pics/182328.jpg " (contoh acak)

Ram
sumber
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>
      );

  }
}
Kiran
sumber
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"
      }
Saad Mirza
sumber
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>
    )
  }
Ali Mohammad
sumber