在Preact中重用“Add Todo”组件作为“Edit Todo”组件是一个常见的需求,可以通过传递不同的props来实现。以下是详细的概念、优势、类型、应用场景以及示例代码。
组件重用:在React或Preact中,组件重用是指将一个组件的逻辑和UI在不同的上下文中使用。通过传递不同的props,可以使同一个组件在不同的场景下表现出不同的行为。
假设我们有一个“Add Todo”组件,可以通过传递不同的props将其重用为“Edit Todo”组件。
import { h, Component } from 'preact';
class AddTodo extends Component {
state = {
title: '',
description: ''
};
handleChange = (e) => {
this.setState({ [e.target.name]: e.target.value });
};
handleSubmit = (e) => {
e.preventDefault();
const { title, description } = this.state;
if (this.props.isEditing) {
// 调用编辑逻辑
this.props.onEdit({ title, description });
} else {
// 调用添加逻辑
this.props.onAdd({ title, description });
}
this.setState({ title: '', description: '' });
};
render() {
const { title, description } = this.state;
return (
<form onSubmit={this.handleSubmit}>
<input
type="text"
name="title"
value={title}
onChange={this.handleChange}
placeholder="Title"
/>
<textarea
name="description"
value={description}
onChange={this.handleChange}
placeholder="Description"
/>
<button type="submit">{this.props.isEditing ? 'Edit Todo' : 'Add Todo'}</button>
</form>
);
}
}
export default AddTodo;
import { h } from 'preact';
import AddTodo from './AddTodo';
const App = () => {
const handleAdd = (todo) => {
console.log('Adding todo:', todo);
};
const handleEdit = (todo) => {
console.log('Editing todo:', todo);
};
return (
<div>
<AddTodo onAdd={handleAdd} />
<AddTodo isEditing onEdit={handleEdit} />
</div>
);
};
export default App;
通过传递isEditing
prop来区分模式,并在组件内部根据该prop执行不同的逻辑。
如果是在编辑模式下,可以在组件外部计算好初始数据,并通过props传递给组件。
<AddTodo isEditing initialData={initialTodoData} onEdit={handleEdit} />
然后在组件内部使用componentDidMount
或useEffect
来设置初始状态。
componentDidMount() {
if (this.props.isEditing && this.props.initialData) {
this.setState(this.props.initialData);
}
}
通过这种方式,可以灵活地在Preact中重用组件,提高开发效率和代码的可维护性。
领取专属 10元无门槛券
手把手带您无忧上云