- 27
- 0
我需要将js定义的一些style传到一个第三方库里,但是貌似state更新后并没有重新渲染样式,我确定组件是更新了,但是这个第三方库传进去的样式未更新,有人帮忙解决下吗?
代码如下
class Console extends React.Component {
getConsoleFeedStyle(theme) {
const style = {};
switch (theme) {
case 'light':
return Object.assign(style, a);
case 'dark':
return Object.assign(style, b);
case 'contrast':
return Object.assign(style, c);
default:
return '';
}
}
render() {
return (
<div>
{this.props.consoleEvents.map((consoleEvent) => {
const { theme } = this.props;
return (
<div key={consoleEvent.id}>
<ConsoleFeed
styles={this.getConsoleFeedStyle(theme)}
logs={Array.of(consoleEvent)}
/>
</div>
);
})}
</div>
</div>
);
}
} - 共 0 条
- 全部回答
-
卍魅惑 普通会员 1楼
在React中,当你从
useState或useEffect中更新状态时,React会自动重新渲染组件。然而,如果你更新的是一个第三方库(例如,一个库的API),并且第三方库未重新渲染,那么你可能需要手动重新渲染组件。以下是一些可能的解决方案:
- 使用第三方库的API。许多第三方库提供了
useEffect和useState的功能,你可以直接使用它们。例如,如果你正在使用Redux,你可以这样更新状态:
```jsx import { useSelector, useDispatch } from 'react-redux'; import { updateTodo } from './actions';
const todos = useSelector((state) => state.todos); const dispatch = useDispatch();
const updateTodo = (id, text) => { dispatch(updateTodo(id, text)); };
export default () => { const { id, text } = todos;
return (
updateTodo(e.target.value, text)} />); }; ```- 使用第三方库的API。许多第三方库提供了
useMemo和useState的功能,你可以直接使用它们。例如,如果你正在使用MobX,你可以这样更新状态:
```jsx import { useMemo, useState } from 'react';
const todos = useMemo(() => todos, [todos]);
const updateTodo = (id, text) => { todos[id] = text; };
export default () => { const { id, text } = todos;
return (
updateTodo(e.target.value, text)} />); }; ```- 使用第三方库的API。许多第三方库提供了
useCallback和useMemo的功能,你可以直接使用它们。例如,如果你正在使用Enzyme,你可以这样更新状态:
```jsx import { useCallback, useMemo } from 'enzyme'; import { useState } from 'react';
const todos = useMemo(() => todos, [todos]);
const updateTodo = (id, text) => { todos[id] = text; };
export default function Example() { const [todos, setTodos] = useState(todos); const [id, setId] = useState(id);
const handleClick = () => { setTodos(todos.map((todo) => todo.id === id ? { ...todo, text: 'Updated' } : todo)); };
return (
updateTodo(e.target.value, 'Updated')} />); }; ```-
{todos.map((todo, index) => (
- {todo.text} ))}
请注意,如果第三方库未重新渲染,那么你可能需要在
useMemo或useCallback中添加一个检查,以确保你的状态没有改变。例如,你可以在useMemo中添加一个检查:```jsx const todos = useMemo(() => todos, [todos]);
const updateTodo = (id, text) => { todos[id] = text; };
export default function Example() { const [todos, setTodos] = useState(todos); const [id, setId] = useState(id);
const handleClick = () => { setTodos(todos.map((todo) => todo.id === id ? { ...todo, text: 'Updated' } : todo)); };
useEffect(() => { const unsubscribe = todos.subscribe((todos) => { if (todos.length !== id) { throw new Error('State has changed'); } });
return () => unsubscribe();}, [todos, id]);
return (
updateTodo(e.target.value, 'Updated')} />); }; ```-
{todos.map((todo, index) => (
- {todo.text} ))}
- 使用第三方库的API。许多第三方库提供了
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

