#reactjs
Вопрос:
План — визуализировать <List />
элемент index.js
. Отображает элементы задач, созданные пользователем.
Ошибка —
./src/components/App.jsx
Attempted import error: './List' does not contain a default export (imported as 'List').
index.js —
import React from 'react';
import ReactDOM from 'react-dom';
import {List, Render} from './components/List';
import App from './components/App';
import '../src/styles.css';
ReactDOM.render(
<App />,
document.getElementById('root')
);
ReactDOM.render(
<Render />
, document.getElementById("list"));
Список.jsx —
import react, { useRef } from 'react';
import ReactDOM from 'react-dom';
var todoItems = [];
const inputRef = useRef();
function onClick() {
todoItems.push(inputRef.current.value);
console.log("Pushed item in the array!");
render(inputRef.current.value);
}
function Render(value) {
todoItems.forEach(function a(item) {
<h1>{item}</h1>
});
}
function List() {
return (
<div className="mainbox">
<div className="inputdiv">
<input
type="text"
ref={inputRef}
placeholder="Enter Task..."
className="textbox"
id="taskName"
/>
<button className="button" onClick={onClick}> </button>
</div>
</div>
);
}
export {List, Render};
Я тоже пытался —
export default List;
export {Render};
Но в нем говорится, что useRef() не может быть вызван на верхнем уровне.
Поэтому я переместил inputRef
его в List()
, но там сказано, что Render
это не определено.
Спасибо!
P. S
После того, как эта проблема импорта/экспорта будет решена, появится <h1>
ли дисплей?
function Render(value) {
todoItems.forEach(function a(item) {
<h1>{item}</h1>
});
}
Редактировать —
index.html —
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link font-family: "Montserrat" , sans-serif;
href="https://fonts.googleapis.com/css?family=McLaren|Montserratamp;display=swap" rel="stylesheet" />
<link rel="stylesheet" href="../src/styles.css">
<title>Mandy's Todo-List App!</title>
</head>
<body>
<div id="root">
<div id="list">
</div>
</div>
</body>
</html>
Комментарии:
1. Вам не нужно использовать два
ReactDOM.render()
s. И вам тоже не нужно манипулироватьindex.html
.2. Все, что завернуто внутри
App
компонента, в конечном итоге будет визуализировано внутри<div id='root'>
. Визуализируйте свойtodoItems
внутреннийList
компонент, если хотите, а затем импортируйтеList
компонент внутриApp
компонента.3. @Hamidreza Спасибо, но я получаю эту ошибку —
Target container is not a DOM element.
послеimport List, {Render} from './List'; function App() { ReactDOM.render( <Render /> , document.getElementById("list"));
4. Удалите второй
ReactDOM.render()
изindex.js
и<div id='list'>
изindex.html
.
Ответ №1:
import { useState, useEffect } from 'react';
function App() {
const [value, setValue] = useState('');
const [list, setList] = useState([]);
function handleChange(event) {
setValue(event.target.value);
}
function addTodo() {
setList([...list, value]);
}
useEffect(() => setValue(''), [list]);
return (
<div className='App'>
<input value={value} onChange={handleChange}/>
<button onClick={addTodo}>Add</button>
{list.map((item, index) => <h1 key={index}>{item}</h1>)}
</div>
);
}
export default App;