import React from 'react'
function MyComponent() {
return (
<div>
<p style = {{color: 'red'}}>Testing to see if my component renders!</p>
</div>
)
}
export default MyComponent;
Теперь давайте создадим файл CustomIframe.js.
import React, { useState } from 'react'
import { createPortal } from 'react-dom'
const CustomIframe = ({
children,
...props
}) => {
const [contentRef, setContentRef] = useState(null)
const mountNode =
contentRef?.contentWindow?.document?.body
return (
<iframe {...props} ref = {setContentRef}>
{mountNode && createPortal(children, mountNode)}
</iframe>
)
}
export default CustomIframe;
Что взамен делает ref ? и зачем это нужно? и зачем ставить setContentRef вместо contentRef в ref = {}?
Кроме этого, почему {... props} присутствует в теге iframe, когда они нигде не используются?
Я пытался найти ref в Интернете, узнал только об хуке useRef, а не ref
setContentRef
назначит ссылку на элемент iframe для contentRef
, чтобы вы могли получить доступ к собственным методам и свойствам, доступным в iframe, например contentWindow
{...props}
распространит все значения реквизита как атрибуты на
элемент iframe
если вы хотите получить доступ к нативным методам вашего компонента, например contentWindow
, ref прикрепит ссылку на элемент к переменной через ref
Хорошо, последние 2 вопроса 1) Так как ref = {setContentRef} в iframe, а значение состояния равно null, поэтому мы передаем null в ref, или это похоже на то, что где-то промежуточное значение было обновлено с null до MyComponent 2) Является ли атрибут ref для только iframe или часть JavaScript
Во время редера реакция присвоит переменной значение ref. Ref доступен для каждого элемента HTML. не только фрейм
Привет, Сачила, так как мы всегда обновляем состояние по функциям в React, но здесь, чтобы обновить contentRef с нуля до тела iframe, почему мы не делаем setContentRef(contentRef?.contentWindow?.document?.body)? еще раз спасибо за ваше терпение
потому что ref делает это внутри, поэтому нам не нужно явно устанавливать его
что такое ref и зачем нужно передавать ref в теге inframe