行内样式兼容,style = {{height:"100px"}} 中100px要写成 Taro.pxTransform(100)
taro-ui 中 AtDrawer一直频繁切换打开和关闭drawer 解决:onclose方法要写好控制开关,
react-toolkit 同步写法async 方法 await dispatch,编辑器中报await不起作用,实质是起作用的;或者用callback(res) 传入action方法
小程序获取头像和昵称:需要在新页面通过特定type去触发,
头像生成base64 方法:


在开发者工具中获取昵称,点击获取之后e.detail.value为空,为开发者工具bug,真机上能获取到;获取头像获取到的是微信临时路径,想保存到服务器可以生成base64获取上传到服务器。
头像生成base64 方法:
const onChooseAvatar =async (e) => {
const base64Url = await getImageBase64_readFile(e.detail.avatarUrl);
setAvatar(base64Url);
};
const getImageBase64_readFile = async (tempFilePath) => {
const base64 = await new Promise((resolve) => {
//获取全局唯一的文件管理器
Taro.getFileSystemManager().readFile({
//读取本地文件内容
filePath: tempFilePath, // 文件路径
encoding: "base64", // 返回格式
success: ({ data }) => {
return resolve("data:image/png;base64," + data);
},
fail(res) {
console.log("fail", res);
},
});
});
return base64;
};
textArea 自动高度autoHeight在真机上高度不对,需要手动在style中设置height,此方法也需要再真机上调试,因高度受字体大小影响和line-height控制,不同字体大小需在真机上测试;可以设置line-height和height相同(此方法文字间距太小)
另外发现,动态渲染textarea之后 组件抛出的onlinechange方法不会触发(暂未找到解决办法)



函数式组件全局增加分享
Taro.showShareMenu({
withShareTicket: true,
// @ts-ignore
menus: ["shareAppMessage", "shareTimeline"],
showShareItems: ["shareAppMessage", "shareTimeline"],
});
const page = Taro.getCurrentInstance().page;
if (page && !page.onShareAppMessage) {
page.onShareAppMessage = () => {
return {
title: "发送给好友",
path: `pages/index/index?shareCode=${
loginUserInfo?.memberLoginUserDTO?.memberUser?.shareCode || ""
}`,
imageUrl: shareFriendIcon,
};
};
page.onShareTimeline = () => {
return {
title: "分享朋友圈",
query: `shareCode=${loginUserInfo?.memberLoginUserDTO?.memberUser?.shareCode} || ''`, //页面携带参数
imageUrl: shareFriendIcon,
};
};
}
socket连接封装:多个socket 用chatId区分,保存连接,注意保存全局对象window上,socket全局保存
export const sendHeartBeat = (task) => {
heartTimer = setInterval(() => {
task.send({ data: HEARTBEAT });
}, 5000);
};
export const socketInit = async ({
chatId,
onMessageNewDialog,
reConnect,
callback,
}) => {
try {
let curChatId = chatId || Taro.getStorageSync("chatId");
if (Object.keys(window.socketObjs).length) {
for (let chat_Id in window.socketObjs) {
window.socketObjs[chat_Id]?.close();
}
window.socketObjs = {};
}
if (!curChatId) return;
const token =
Taro.getStorageSync("userToken") || Taro.getStorageSync("touristToken");
const url = `${wsBaseUrl}/ws/newChatGpt?abc=${token}&chat_id=${curChatId}&model=${Taro.getStorageSync(
"chatModal"
)}`;
await Taro.connectSocket({
url,
success: function () {
console.log("connect success");
},
}).then((task) => {
task.onOpen(function () {
if (task.readyState === 1) {
window.socketObjs[curChatId] = task;
sendHeartBeat(task);
callback && callback(task);
}
});
task.onMessage(function (msg) {
// onMessageNewDialog(msg.data, hasClickSend);
onMessageNewDialog(msg.data);
});
task.onError(function (e) {
reConnect && reConnect(curChatId);
console.log("onError", e);
});
task.onClose(function (e) {
socketOnClose(curChatId);
console.log("onClose: ", e);
});
});
} catch (e) {
console.log(e);
}
};
使用

const onMessageNewDialog = (str) => {
//状态都带【】
if (str.indexOf("[") === -1) {
resultStr += str;
setOnMessageResult(resultStr);
scrollToBottom({});
setScrollTop(resultStr.length + 10000);
}
if (str === "[done]") {
//完成展示菜单
setShowMenus(true);
resultStr = "";
setIsNewDialog(false);
if (!hasMakeTitle) {
hasMakeTitle = true;
let newMakeTitleNum = makeTitleNum + 1;
setMakeTitleNum(newMakeTitleNum);
}
} else if (str.indexOf("noTokens") > -1) {
//游客
if (loginUserInfo?.memberLoginUserDTO?.memberType == "0") {
const newData = JSON.parse(JSON.stringify(loginUserInfo));
newData.memberLoginUserDTO.memberType = "0";
dispatch(setLoginUserInfo(newData));
Taro.removeStorageSync({
key: "userToken",
});
Taro.showModal({
content: "积分已用完免费注册赠送积分",
success: (res) => {
if (res.confirm) {
Taro.switchTab({
url: "/pages/my/index",
});
} else if (res.cancel) {
// console.log("用户点击取消");
}
},
});
} else {
Taro.showModal({
content: "去个人中心进行充值",
success: (res) => {
if (res.confirm) {
//用户去购买
Taro.navigateTo({
url: "/pages/my/rightslist/index",
});
} else if (res.cancel) {
// console.log("用户点击取消");
}
},
});
}
}
};
toSetSocketInit(resChatId, () => {
window.socketObjs[resChatId].send({
data: JSON.stringify(param),
});
})