[英]My react component is not rendering for some reason. The console is running my code, and there are no errors in the terminal
我正在構建一個 React 翻譯器應用程序。 一切看起來都很好,但是當我保存文件或刷新頁面時頁面沒有呈現。 在控制台中,我可以看到正在獲取的語言列表,並且已經成功獲取。 但是網頁上沒有任何渲染。
import React, { useState, useEffect } from "react";
import { Form, TextArea, Button, Icon } from "semantic-ui-react";
import axios from "axios";
const apiKey = "c9200cf48dbc4351819cff23bea6bda0";
const baseUrl = "https://api.cognitive.microsofttranslator.com/";
export default function Translate() {
const [text, setText] = useState("");
const [resultText, setResultText] = useState("");
const [languagesList, setLanguagesList] = useState([{ code: "es", name: "Spanish" }]);
const [selectedLanguage, setSelectedLanguage] = useState("");
const [detectedLanguage, setDetectedLanguage] = useState("");
const [error, setError] = useState(null);
const [loading, setLoading] = useState(false);
// Get Languages
useEffect(() => {
console.log("fetching languages list...");
axios
.get(`${baseUrl}languages?api-version=3.0&scope=translation`, {
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
},
})
.then((response) => {
console.log("Language list fetched successfully");
setLanguagesList(response.data.languages);
})
.catch((error) => {
setError(error);
console.error(error)
});
}, []);
// Detect Language
const getLanguageSource = async () => {
setLoading(true);
setError(null);
try {
const response = await axios.post(
`${baseUrl}detect?api-version=3.0`,
{
text: text,
},
{
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
"Content-type": "application/json",
},
}
);
setDetectedLanguage(response.data.language);
} catch (error) {
setError(error);
console.error(error)
}
setLoading(false);
};
// Translate Text
const translateText = async () => {
setLoading(true);
setError(null);
try {
const response = await axios.post(
`${baseUrl}translate?api-version=3.0`,
[
{
text: text,
},
],
{
params: {
"to": selectedLanguage,
},
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
"Content-type": "application/json",
},
}
);
setResultText(response.data[0].translations[0].text);
} catch (error) {
setError(error);
console.error(error)
}
setLoading(false);
const handleLanguageChange = (event) => {
setSelectedLanguage(event.target.value);
};
return (
<div>
<div>
<div className="app-header">
<h2 className="header"> Foreign Language Interpreter</h2>
</div>
<div className="app-body">
<Form>
<Form.Field
control={TextArea}
label=""
placeholder="Type text to translate..."
onChange={(e) => setText(e.target.value)}
onBlur={getLanguageSource}
/>
<select
className="language-select"
onChange={handleLanguageChange}
value={selectedLanguage}
name="selectedLanguage"
>
<option value="">Select Language</option>
{languagesList
? languagesList.map((language) => {
return (
<option key={language.code} value={language.code}>
{language.name}
</option>
);
})
: null}
</select>
<Button
loading={loading}
onClick={translateText}
disabled={!text || !selectedLanguage}
>
Translate
</Button>
{error && <p>An error occurred: {error.message}</p>}
<p>{resultText}</p>
</Form>
</div>
</div>
</div>
);
}
}
你的頁面結構錯誤。 我在下面分享了你可以改變這個。
import React, { useState, useEffect } from "react";
import { Form, TextArea, Button, Icon } from "semantic-ui-react";
import axios from "axios";
const apiKey = "c9200cf48dbc4351819cff23bea6bda0";
const baseUrl = "https://api.cognitive.microsofttranslator.com/";
export default function Translate() {
const [text, setText] = useState("");
const [resultText, setResultText] = useState("");
const [languagesList, setLanguagesList] = useState([
{ code: "es", name: "Spanish" },
]);
const [selectedLanguage, setSelectedLanguage] = useState("");
const [detectedLanguage, setDetectedLanguage] = useState("");
const [error, setError] = useState(null);
const [loading, setLoading] = useState(false);
// Get Languages
useEffect(() => {
console.log("fetching languages list...");
axios
.get(`${baseUrl}languages?api-version=3.0&scope=translation`, {
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
},
})
.then((response) => {
console.log("Language list fetched successfully");
setLanguagesList(response.data.languages);
})
.catch((error) => {
setError(error);
console.error(error);
});
}, []);
// Detect Language
const getLanguageSource = async () => {
setLoading(true);
setError(null);
try {
const response = await axios.post(
`${baseUrl}detect?api-version=3.0`,
{
text: text,
},
{
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
"Content-type": "application/json",
},
}
);
setDetectedLanguage(response.data.language);
} catch (error) {
setError(error);
console.error(error);
}
setLoading(false);
};
// Translate Text
const translateText = async () => {
setLoading(true);
setError(null);
try {
const response = await axios.post(
`${baseUrl}translate?api-version=3.0`,
[
{
text: text,
},
],
{
params: {
to: selectedLanguage,
},
headers: {
"Ocp-Apim-Subscription-Key": apiKey,
"Content-type": "application/json",
},
}
);
setResultText(response.data[0].translations[0].text);
} catch (error) {
setError(error);
console.error(error);
}
setLoading(false);
};
const handleLanguageChange = (event) => {
setSelectedLanguage(event.target.value);
};
return (
<div>
<div>
<div className="app-header">
<h2 className="header"> Foreign Language Interpreter</h2>
</div>
<div className="app-body">
<Form>
<Form.Field
control={TextArea}
label=""
placeholder="Type text to translate..."
onChange={(e) => setText(e.target.value)}
onBlur={getLanguageSource}
/>
<select
className="language-select"
onChange={handleLanguageChange}
value={selectedLanguage}
name="selectedLanguage"
>
<option value="">Select Language</option>
{languagesList
? languagesList.map((language) => {
return (
<option key={language.code} value={language.code}>
{language.name}
</option>
);
})
: null}
</select>
<Button
loading={loading}
onClick={translateText}
disabled={!text || !selectedLanguage}
>
Translate
</Button>
{error && <p>An error occurred: {error.message}</p>}
<p>{resultText}</p>
</Form>
</div>
</div>
</div>
);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.