#javascript #reactjs #react-functional-component
#javascript #reactjs #реагирующий функциональный компонент
Вопрос:
Я обновляю атрибут, innerHTML
используя Ref
, в react. У меня есть компонент с именем as, <Spinner>
который я хотел бы вставить в div
элемент, как показано ниже :
const Drop = () => {
const loadRef = useRef();
const loadFiles = () => {
loadRef.current.innerHTML = `<Spinner name="circle" />`
// ... other actions
}
return (
<div ref={loadRef}></div>
)
}
Как я могу это сделать?
.
Ответ №1:
Использование innerHTML
не будет отображать это содержимое как компонент React, оно будет отображаться как текст. я рекомендую использовать условный рендеринг на основе некоторого состояния или реквизита :
const Drop = () => {
const [loading, setLoading] = useState(false);
const loadFiles = () => {
setLoading(true);
};
return (
<div>
{loading amp;amp; <Spinner name="circle" /> }
</div>
);
}
или prop
const Drop = ({loading,setLoading}) => {
const loadFiles = () => {
setLoading(true);
};
return (
<div>
{loading amp;amp; <Spinner name="circle" /> }
</div>
);
}
Ответ №2:
Не используйте .innerHTML
— поместите возвращаемый JSX Spinner
внутрь Drop
:
const Drop = () => {
const [showingSpinner, setShowingSpinner] = useState(false);
const loadFiles = () => {
setShowingSpinner(true);
// ... other actions
};
return (
<div>
{showingSpinner ? <Spinner name="circle" /> : null}
</div>
);
}
Ответ №3:
Для этого вам не нужен внутренний Html. Вы можете попробовать это
import React,{useState } from 'react';
import Spinner from 'Your Spinner'; // Your Spinner Module
function App() {
const [spinner, setSpinner] = useState(false);
const showSpinner = () => {
setSpinner(true);
}
return (
<div>
<button onClick={() => showSpinner()}>Show Spinner</button>
// Tenary Operation
{spinner ? <Spinner name="circle" /> : null}
</div>
)
}
export default App;