我试图将我的类组件转换为功能组件,但我的过滤器不再工作了。
主要的错误是当我想转换listProducts因为我不知道如何定义与useState为这种情况下的preState
如何能为情况更新状态?
这是我的密码
类组件
class ListShopping extends Component{
constructor(props) {
super(props);
this.state = {
size: "",
sort: "",
cartItems: [],
products: [],
filteredProducts: []
};
}
componentDidMount() {
fetch("http://localhost:8000/products")
.then(res => res.json())
.catch(err =>
fetch("db.json")
.then(res => res.json())
.then(data => data.products)
)
.then(data => {
this.setState({ products: data });
this.listProducts();
});
}
listProducts = () => {
this.setState(state => {
if (state.sort !== "") {
state.products.sort((a, b) =>
state.sort === "lowestprice"
? a.price < b.price
? 1
: -1
: a.price > b.price
? 1
: -1
);
} else {
state.products.sort((a, b) => (a.id > b.id ? 1 : -1));
}
if(state.size !== ""){
return {
filteredProducts: state.products.filter(
a => a.availableSizes.indexOf(state.size.toUpperCase()) >= 0
)
}
}
return { filteredProducts: state.products };
});
};
handleSortChange = e => {
this.setState({ sort: e.target.value });
this.listProducts();
};
handleSizeChange = e => {
this.setState({ size: e.target.value });
this.listProducts();
};
render() {
return (
<div className="container">
<h1>E-commerce Shopping Cart Application</h1>
<hr />
<div className="row">
<div className="col-md-9">
<Filter
count={this.state.filteredProducts.length}
handleSortChange={this.handleSortChange}
handleSizeChange={this.handleSizeChange}
/>
<hr />
<Products
products={this.state.filteredProducts}
/>
</div>
</div>
</div>
);
}
}
功能成分
const ListShopping = () => {
const [data, setData] = useState({
products : [],
filteredProducts : [],
sort : '',
size : ''
})
const {products, filteredProducts, sort, size} = data;
const fetchApi = () => {
axios.get(`http://localhost:8000/products`)
.then(response => response.data)
.then(data => {
setData({...data, products: data});
})
}
const listProducts = () => {
};
const handleSortChange = e => {
setData({...e, sort: e.target.value})
listProducts();
};
const handleSizeChange = e => {
setData({...e, size: e.target.value})
listProducts();
};
useEffect(()=> {
fetchApi()
}, [])
return(
<div className="container">
<h1>E-commerce Shopping Cart Application</h1>
<hr />
<div className="row">
<div className="col-md-9">
<Filter
count={filteredProducts.length}
handleSortChange={handleSortChange}
handleSizeChange={handleSizeChange}
/>
<hr />
<Products
products={filteredProducts}
/>
</div>
</div>
</div>
)
}
假设你有这样一个州
const [todos, setTodos] = useState([1,2,3,4,5,6,7]);
方法1:
现在,如果你想从这个钩子中获取prevState,试试这个方法
setTodos(oldTodo => {
oldTodo.push(1000);
setTodos(oldTodo)
})
这个旧的TODO的工作方式与前一个状态的工作方式相同。
方法2:
const listProducts = () => {
let oldState = todos
//Now do what you want to do with it. modify the oldTodo
setTodos(oldTodo);
}
我更喜欢第二种方法,因为它给了我更多的灵活性来改变修改状态,如果你不能在第一种方法中正确地管理状态,或者如果它发现任何错误,那么它将返回未定义的状态,所以我更喜欢在一个临时变量和工作完成后设置它
试试这个
const listProducts = () => {
setData(data => {
if (data.sort !== '') {
data.products.sort((a, b) =>
data.sort === 'lowestprice'
? a.price < b.price
? 1
: -1
: a.price > b.price
? 1
: -1,
);
} else {
data.products.sort((a, b) => (a.id > b.id ? 1 : -1));
}
if (data.size !== '') {
return {
...data,
filteredProducts: data.products.filter(
a => a.availableSizes.indexOf(data.size.toUpperCase()) >= 0,
),
};
}
return { ...data, filteredProducts: data.products };
});
};
我有以下react功能组件来帮助支持react路由器所需的身份验证路由。 我需要将其从功能组件转换为类组件,以便利用React.component的componentDidMount方法。不幸的是,我很难弄清楚如何迁移它。如果我照原样做,我需要复制组件和…rest参数,但我不知道怎么做。我想我可以用这个.props.Component获得组件参数,但我不确定如何拉…rest。我是JSX和ES6的新
我试图让用户从gallery中选择一幅图像,在imageView中显示它,同时创建同一文件的字节数组。 调试后: 'new File(filepath)'使用有效的文件系统路径执行没有问题。 但是它总是跳过'ByteArrayOutputStream baos=new ByteArrayOutputStream();'到带有java.ioFileNotFoundException的IOExcept
我有一个应用程序正在使用类组件开发react,我发现了一个功能的代码,我想添加到我的代码中,但它是使用功能组件制作的。代码在这里https://codesandbox.io/s/framer-motion-animate-in-view-gqcc8 但相关部分是这样的。 我不知道如何在我的类组件中添加那个控件变量 我应该把它添加到我的州吗?我不明白如何让它在类组件中工作
问题内容: 我在一个一维数组中有一个例子。它只会输出列。我的想法是使用2d数组选择行和列。这是我的代码: myfile.csv 输出: 名字蒂姆汤姆 问题答案: 我只是将split结果()添加到a中,如果您确实希望将其作为2d数组,则在事后将其转换。
我是初学C#的,我想为学校创建一个计算器,但是在第45行出现了一个错误。错误消息:字符串长度必须正好为一个字符。我认为在拆分String数组然后另存为char数组之后会有一个错误。但我不知道为什么,也许是假的。 代码部分: 错误消息由char[]发送。 我想我有一个从字符串[]分裂的翻译错误
问题内容: 注意: 这要求与通常的元组到数组的转换相反。 我必须将一个参数传递给(包装的c ++)函数作为嵌套元组。例如,以下作品 而以下 不 不幸的是,我想使用的参数是一个numpy数组。对于某些N,该阵列的尺寸始终为2xN,这可能会很大。 有没有简单的方法可以将其转换为元组?我知道我可以循环遍历,创建一个新的元组,但是如果numpy数组提供了一些不错的访问权限,我会更喜欢。 如果不可能如我所愿