【问题标题】:Mapping an Array of state in Preact在 Preact 中映射状态数组
【发布时间】:2020-02-22 18:22:00
【问题描述】:

之前没有使用过 Preact,所以我想知道这是否只是库的另一个怪癖。虽然我试图像往常一样映射一组状态,但它并没有像我想的那样输出<li>

import { h, Preact, setState } from 'preact';
import { useEffect } from 'preact/hooks';
import style from './style.css';

const state = { todos: [], text: '' };

const submitTodo = (e) => {
	e.preventDefault(e);
	addItem();
}

const addItem = () => {
	state.todos.push(inputValue());
}

const inputValue = () => {
	const todoInput = document.querySelector('.todoInput');
	let inputItem = todoInput.value;
	return inputItem;
}

const ToDo = () => (
	<div class={style.todo}>
		<h1 class="title">ToDo</h1>
		<ul class="todoList">
		{state.todos.map((item, i) =>{
			<li key={i}>{item}</li>
		})}
		</ul>
		<form onSubmit={addItem}>
			<input type="text" placeholder="Add a todo item here..." class="todoInput" onInput={inputValue}/>
			<button type="submit" class="updateBtn" onClick={submitTodo}>Add Task</button>
		</form>
	</div>
);

export default ToDo;

我已经检查过我编写的代码实际上正确地映射了状态(它通过控制台日志在其他任何地方进行)但是在 ToDo 组件内部它不会映射。

希望有人能告诉我我犯了什么菜鸟错误?如果您能帮我在&lt;li&gt; 中正确地绘制出状态图,我将不胜感激!

【问题讨论】:

  • 你不应该改变状态,改用setState(state.todos.concat(inputValue());)。另外我不确定你应该使用 querySelector 但我不使用 preact,你不能只使用event.target吗?
  • setState 需要去哪里? @HMR
  • 你在哪里进行了变异推送。
  • 无法通过Uncaught ReferenceError: setState is not defined 错误,甚至不知道如何定义它?目前制作addItem() 这个setState(state.todos.concat(inputValue)); 想知道是不是因为我没有使用class

标签: javascript arrays reactjs state preact


【解决方案1】:

您需要在状态更改后重新渲染ToDo。否则它将始终显示初始状态。

【讨论】:

  • 谢谢@marzelin。我该怎么做? setState?
猜你喜欢
  • 1970-01-01
  • 2021-07-17
  • 2020-04-22
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多